翻页爬取豆瓣电影名称和评分
分析:
1.爬取翻页数据重点在于翻页的操作,由于每一页发送请求,解析和保存数据的方式都是一样的,因此通过找到每一页url的规律,利用for循环进行翻页即可。
2.爬取的数据为json格式,因此需要通过json()方法转成python格式进行操作
3.数据解析,在利用jsonpath解析数据时,我们可以通过响应数据放在JSON在线解析中找到名称和评分所在的节点。
4.在同一文件保存多个文本数据时,写入方式需要用a追加的方式。
本次案例以豆瓣电影的经典电影为例:
找到页面信息的url并查看响应(相应类型为json格式)
第一页的url:https://movie.douban.com/j/search_subjectstype=movie&tag=%E7%BB%8F%E5%85%B8&sort=recommend&page_limit=20&page_start=0
第二页的url:https://movie.douban.com/j/search_subjectstype=movie&tag=%E7%BB%8F%E5%85%B8&sort=recommend&page_limit=20&page_start=20
由上述url可知,url的不同在于参数page_start
第一页page_start=0
第二页page_start=20
那么我们for循环的规律也就显而易见。
…
通过JSON在先进行数据解析,找到目标数据所在的节点。
翻页的规律和解析的方法已经找到,那么开始我们的代码
import requests
import jsonpath
import json
if __name__ == '__main__':
# 输入爬取的页数
pages = int(input('请输入爬取的页数:'))
for i in range(pages):
page_start = i*20
# 确认目标的url
url = f'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%BB%8F%E5%85%B8&sort=recommend&page_limit=20&page_start={page_start}'
# 构造请求头参数
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'
}
# 发送请求,获取响应
response = requests.get(url,headers=headers)
# 将json数据转换成py数据
py_data = response.json()
# 提取文本中的目标数据:电影名称,电影评分
title_list = jsonpath.jsonpath(py_data,'$..title')
rate_list = jsonpath.jsonpath(py_data,'$..rate')
# 将名称和评分放进字典,保存为json文件
for i in range(len(title_list)):
dict_ = {}
dict_[title_list[i]] = rate_list[i]
# 将字典转换成json格式
json_data = json.dumps(dict_,ensure_ascii=False)+',\n'
# 保存到本地
with open('翻页豆瓣电影评分.json','a',encoding='utf-8')as f:
f.write(json_data)
爬取3页数据,每一页对应20个电影数据,那么结果数据就是60个电影的数据