excel抓取多页网页数据(Python学习资料以及*敏*感*词*流解答点击即可加入(组图))
优采云 发布时间: 2022-01-17 05:24excel抓取多页网页数据(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
结语
在写作的过程中,难免还有改进的余地。如果有更好的方法,或者有不同的意见,请指出。