python怎么获取动态网页链接

似乎在页面上有按钮"see all"你能告诉峩怎么去这样一个网页上的所有内容,也许使用图书馆以外硒

}

我们知道js可以操纵DOM可以请求后囼,因此我们最终看到的html页面可能是js执行的结果如果我们单纯用爬虫获取动态页面的html,看到的可能就是一堆js
我自己总结了两种方式1、獲取后台接口,2、通过selenium+chromdriver这篇博客先介绍第一种,这两种方式各有优劣
动态页面有一个特点它所需要的数据需要自己去请求后台,不是寫死在html中的因此只要找到这个后台接口即可,采用这种方式优点是快,缺点是解析难度比较大需要解析js或是抓包分析获得后台接口
基本上可以为所欲为,因为本身就是模拟浏览器的行为它可以自动解析js,生成最终的html页面因为需要解析js,因此爬取速度较慢解析js会占用较多的cpu计算资源,由于比较吃硬件所以并发能力比较弱
下面以爬取豆瓣top 250的电影为例子,讲解第一种方式之所以选择豆瓣,是因为豆瓣top250的后台接口几乎就暴露在我们面前由于是练习,所以步骤比较繁琐:

点击加载更多一定会发送数据给后台,只需要捕获请求即可不需要去看冗长的js代码(并且js代码可能进行了混淆,导致可读性极差)使用chrome开发者工具等抓包工具抓取请求路径如下:

该请求返回json数據,观察请求参数page_limit应该和返回的json条目有关,返回的json格式如下:
 

这里需要注意几点内容:
1、http默认不支持中文虽然我们有时看到有中文的url,但是在发送报文时url是会进行编码的,中文会被编码成%xx的形式如下:
相应的编码规则可以自己谷歌,urllib模块中可以通过parse.quote函数将中文编碼成%xx的形式
2、爬取过程中需要时刻注意自己是否被禁掉了,因为豆瓣封禁IP并不会返回http错误而是返回一个IP封禁的页面,这个页面有一个特點就是一定会包括IP两个字样,因此可以通过检测页面是否含有IP来判断自己是否被封禁这里我借鉴了懒加载的思想,并没有每次都检测被禁掉后:
 

这两句代码一定会抛异常,此时在检测是否被禁止
3、每次爬取过后一定要睡眠一段时间做到文明爬取
}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信