提示:最新Python爬虫资料/代码练习>>戳我直达
前言
抓取动态加载数据
话不多说,开练!
爬虫抓取动态加载数据
确定网站类型
首先要明确网站的类型,即是动态还是静态。检查方法:右键查看网页源码 —> 搜索“辛德勒的名单”关键字,如下图所示:
图1:分析网站类型
最终发现源码页中没有出现想要抓取的数据,只有一大堆的 JS 代码,由此确定该网站为动态网站。
影片详情信息
接下来,使用快捷键 F12 打开控制台进行抓包,点击NetWork
选项卡 —>XHR
选项 —> Preview
选项卡 —> 刷新当前页面抓取数据包,如下图所示:
图2:抓取动态网站数据包
从图 2 可知,我们想要抓取的数据取全部包含在当前的数据包中。当我们向下滚动鼠标滑轮时,左侧栏内的数据包会实现自动加载,这是使用Ajax异步加载技术实现的。
通过查看数据 Headers 选项可以明确 url 地址、查询参数等信息,如下所示:
图3:分析Headers信息
从上图可以得知请求的基准 URL (由于还未拼接查询参数,所以称之为基准 URL),如下所示:
继续滚动鼠标滑轮可知查询参数具有如下规律:
type: 4 # 电影类型
interval_id: 100:90 #代表网页上滑动条的百分比(好于100%-90%的历史片)
action: '' # 空
start: 0 # 每次加载电影的起始索引值 0 20 40 60
limit: 20 # 每次加载的电影数量,1为初始值,后续加载时20固定不变
注意:寻找规律时,后加载出来的数据包会排在最前面,除去第一个数据包外,其余数据包如下所示:
图4:寻找查询参数值的规律
影片总数量
注意:第一个数据包反映了每个类型中电影的总数量,其 url 与响应信息如下:
影片类型与类型码
影片的类型与类型码包含在电影排行榜的主界面中,如下所示:
图5:影片类型与类型码
分析上述页面结构,然后使用正则表达式来提取想要的数据,并定义选择菜单“menu”,代码如下所示:
import re
def get_all_type_films(self):
# 获取影片类型和类型码
url = 'https://douban-dy网址/chart'
headers = self.get_headers()
html = requests.get(url=url, headers=headers).text
re_bds = r'<a href=.*?type_name=(.*?)&type=(.*?)&.*?</a>'
pattern = re.compile(re_bds, re.S)
r_list = pattern.findall(