Request模块实战04 ---- 爬取豆瓣电影排行榜


需求:爬取豆瓣指定的电影类型排行榜

Request模块实战04 ---- 爬取豆瓣电影排行榜_python


本案例主要通过查看豆瓣网站推荐电影,通过python爬取指定类型电影排行榜上的电影信息。


需求分析:

通过对网页的分析,当我们对页面进行滚动的时候,对应的电影信息会按照评分不断的刷新出来,类似于之前的破解百度翻译,我们会发现都有局部刷新的概念,也就是ajax的应用。

爬取豆瓣电影排行信息ajax请求局部刷新

通过开发者模式,我们可以发现确实在每次滚动刷新获取电影信息的时候,都会发动一个ajax请求包,配上特定的参数,即可获取。并且同时信息也是以json的形式传输。


代码实现:

# -*- coding: utf-8
# @Time : 2020/12/13 22:37
# @Author : ZYX
# @File : request实战之豆瓣电影分类排行榜.py
# @software: PyCharm
import requests
import json

if __name__ == '__main__':
# UA伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3776.400 QQBrowser/10.6.4212.400'
}
# 指定url
url = 'https://movie.douban.com/j/chart/top_list?'
# 设定处理参数
param = {
'type': '17',
'interval_id': '100:90',
'action': '',
'start': '0', # 从数据库中取电影的起点
'limit': '20', # 一次请求取出的限制数
}
# 发送请求
response = requests.get(url=url,params=param,headers=headers)
# 获取响应数据
list_data = response.json()
# 结果持久化
filePath = "./data/douBan.json"
with open(filePath,'w',encoding="utf-8") as fp:
json.dump(list_data,fp=fp,ensure_ascii=False)
print("douBan.json保存成功,爬取过程已完成!!!")

结果展示:

Request模块实战04 ---- 爬取豆瓣电影排行榜_ajax_02


Request模块实战04 ---- 爬取豆瓣电影排行榜_局部刷新_03


分析:

  • url参数处理
  • Request模块实战04 ---- 爬取豆瓣电影排行榜_ajax_04

  • 对于这里的参数我们是写死的,可以通过传入实参的形式实现动态指定电影类型爬取。优化代码如下:
# 设定处理参数
type = input("请输入电影类型号:")
start = input("请输入爬取的电影开始:")
limit = input("请输入爬取的电影信息数量:")
param = {
'type': type, # 电影类型
'interval_id': '100:90',
'action': '',
'start': start, # 从数据库中取电影的起点
'limit': limit, # 一次请求取出的限制数
}
# 发送请求
response = requests.get(url=url,params=param,headers=headers)

Request模块实战04 ---- 爬取豆瓣电影排行榜_ajax_05

在这里我们设置参数为传入实参的形式,类型号13(爱情),开始爬取的电影编号为2,信息数目为2,也就是爬取两条电影信息。通过对爬取后的文件分析可以得出start参数的值是从0开始的,类似数组下标(索引)

Request模块实战04 ---- 爬取豆瓣电影排行榜_局部刷新_06


Request模块实战04 ---- 爬取豆瓣电影排行榜_json_07


Request模块实战04 ---- 爬取豆瓣电影排行榜_ajax_08