excel抓取多页网页数据(Python学习资料以及*敏*感*词*流解答点击即可加入(组图))

优采云 发布时间: 2022-01-17 05:24

  excel抓取多页网页数据(Python学习资料以及*敏*感*词*流解答点击即可加入(组图))

  效果图

  不多说,先将效果图保存为excel文件,这里只是简单的将爬取的数据保存到文件中,没有对表格数据进行标准化。因为这涉及到另一个python用来处理表的库,这里就不过多解释了,相关的文章后面会涉及到。

  PS:如需Python学习资料,可点击下方链接自行获取

  Python免费学习资料及*敏*感*词*流答案点击加入

  

  前言

  爬取250部豆瓣电影比较简单,特别是对于初学者来说,使用这个页面作为爬虫的动手实践项目是爬虫的首选,很多爬虫都会选择这个项目作为起点。入门练习。一直以来,我很少用函数式编程来写爬虫代码,总是习惯用简单的一行代码的方式来写。在这个 文章 中,我使用了函数式编程。同时还涉及到使用python将数据写入excel表格,初步了解相关用法。

  确定着陆页网址

  通过查看网页的源代码,我们知道网页数据是静态数据,没有任何反爬虫机制,所以说它是一个很好的实践网页作为入口爬虫。鼠标右击选择查看网页源代码,会弹出页面的原创HTML代码,这时候我们按住CTRL+F调出搜索框,搜索我们的数据在浏览器中查看。

  

  搜索其他电影的名字也可以搜索到,所以我们确定该页面是一个静态网页,其目标url就是网址栏中的url,如下图,所以我们确定该页面的url要爬取的页面。

  

  爬取过程中导入相关库

  这个爬取过程涉及requests库,lxml中用于解析页面数据的etree库,以及将内容写入excel文档的xlwt库。如果没有相关库,需要调出命令行,通过 pip install library name 安装。

  import requests

from lxml import etree

import xlwt

#pip install requests

#pip install lxml

#pip install xlwt

123456

  获取页面内容

  通过requests库访问目标网页的数据,保证可以获取到网页内容。

  # 获取网页资源

def get_page_source(start_url,headers):

response = requests.get(url=start_url,headers = headers)

if response.status_code == 200:

response.encoding = response.apparent_encoding

page_data = response.text

return page_data

else:

return "未连接到页面"

12345678910

  页面解析

  获取页面内容后,解析页面内容。这里使用lxml库中的etree进行解析,然后通过xpath语法提取数据。

  # 提取网页电影信息

def page_content(page_data):

etree_data = etree.HTML(page_data)

selector = etree_data.xpath('//*[@class="article"]/ol/li/div/div[2]')

1234

  数据提取

  接下来,我们使用 xpath 语法从解析后的页面中提取数据,提取电影名称、评分、评论数以及每部电影的标签或消息。

  

  实现代码如下:

   for item in selector:

# 电影名称

movie_names = item.xpath('./div/a/span[1]/text()')

# print(movie_names)

# 电影评分

movie_scores = item.xpath('./div[2]/div/span[2]/text()')

# print(movie_scores)

# 电影评论人数

movie_numbers = item.xpath('./div[2]/div/span[4]/text()')

# print(movie_numbers)

# 对电影的描述语

quotes = item.xpath('./div[2]/p[2]/span/text()')

# print(quotes)

# 将每一行获取到的信息添加到一个电影的列表中

one_movie_info_list = [movie_names,movie_scores,movie_numbers,quotes]

# 将一个电影的列表添加到大的列表中

movie_info_list.append(one_movie_info_list)

123456789101112131415161718192021

  编写主函数的函数调用

  if __name__ == '__main__':

for page in range(0,10):

url = 'https://movie.douban.com/top250?start={}&filter='.format(str(page*25))

# page += 25

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}

get_page_source(start_url=url,headers=headers)

page_content(get_page_source(start_url=url,headers=headers))

1234567

  数据存储

   #创建工作簿

book = xlwt.Workbook(encoding='utf-8')

#创建表单

sheet = book.add_sheet('豆瓣排行250')

#填写表头

head = ['排名','电影名','评分','评价人数','电影寄语']

# 写入表头

for h in range(len(head)):

sheet.write(0,h,head[h])

# 排名

for index in range(1,251):

sheet.write(index,0,index)

# 写入相对应的数据

j = 1

for data in movie_info_list:

#从索引为第1行开始写

k = 1

for d in data:

sheet.write(j,k,d)

k += 1

j += 1

#退出工作簿并保存

book.save('豆瓣电影Top250.xls')

1234567891011121314151617181920212223

  完整代码

  import requests

from lxml import etree

import xlwt

movie_info_list = []

# 获取网页资源

def get_page_source(start_url,headers):

response = requests.get(url=start_url,headers = headers)

if response.status_code == 200:

response.encoding = response.apparent_encoding

page_data = response.text

return page_data

else:

return "未连接到页面"

# 提取网页电影信息

def page_content(page_data):

etree_data = etree.HTML(page_data)

selector = etree_data.xpath('//*[@class="article"]/ol/li/div/div[2]')

# print(selector)

for item in selector:

# 电影名称

movie_names = item.xpath('./div/a/span[1]/text()')

# print(movie_names)

# 电影评分

movie_scores = item.xpath('./div[2]/div/span[2]/text()')

# print(movie_scores)

# 电影评论人数

movie_numbers = item.xpath('./div[2]/div/span[4]/text()')

# print(movie_numbers)

# 对电影的描述语

quotes = item.xpath('./div[2]/p[2]/span/text()')

# print(quotes)

# 将每一行获取到的信息添加到一个电影的列表中

one_movie_info_list = [movie_names,movie_scores,movie_numbers,quotes]

# 将一个电影的列表添加到大的列表中

movie_info_list.append(one_movie_info_list)

if __name__ == '__main__':

for page in range(0,10):

url = 'https://movie.douban.com/top250?start={}&filter='.format(str(page*25))

# page += 25

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}

t = get_page_source(start_url=url,headers=headers)

page_content(t)

#创建工作簿

book = xlwt.Workbook(encoding='utf-8')

#创建表单

sheet = book.add_sheet('豆瓣排行250')

#填写表头

head = ['排名','电影名','评分','评价人数','电影寄语']

# 写入表头

for h in range(len(head)):

sheet.write(0,h,head[h])

# 排名

for index in range(1,251):

sheet.write(index,0,index)

# 写入相对应的数据

j = 1

for data in movie_info_list:

#从索引为第1行开始写

k = 1

for d in data:

sheet.write(j,k,d)

k += 1

j += 1

#退出工作簿并保存

book.save('豆瓣电影Top250.xls')

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273

  结语

  在写作的过程中,难免还有改进的余地。如果有更好的方法,或者有不同的意见,请指出。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线