python抓取动态网页(以爬取中国电影网中国票房排行前500为例讲解下获取动态数据的一般步骤)
优采云 发布时间: 2021-11-12 07:21python抓取动态网页(以爬取中国电影网中国票房排行前500为例讲解下获取动态数据的一般步骤)
1.简介
说到抓取网页,我们一般的操作是先查看源码或者查看元素,找到信息所在的节点,然后使用beautifulsoup/xpth/re获取数据。这是我们处理静态网页的常用方式。
但是大家都知道,现在的网页大部分都是动态的,就是通过js渲染来加载数据的。处理静态网页的那一套就不太满意了。因此,掌握爬取动态加载数据的方法是非常有必要的。NS。
下面以爬取中国电影网中国票房500强排名为例,说明获取动态数据的一般步骤。
2.示例和步骤
2.1 首先打开数据页面,右键选择review元素,然后选择Network——>XHR,可以看到现在里面什么都没有了。
2.2 然后点击浏览器的刷新按钮或者按F5刷新页面,可以看到出现了一条数据,这个链接是获取数据的页面API,选择Response,可以看到它是以 Json 格式返回的数据,收录了我们需要的所有信息。
2.3 点击页面的下一页,获取更多的数据,以便找到它们之间的联系。
可以看到,只有图片上几个数据链接的最后一个页码不同,所以不要太友好!复制链接并保存作为代码模拟的参考。
2.4 知道了数据链路之间的关系,我们可以在代码中进行模拟。比如我们要获取前50页的信息,可以这样写。
for i in range(1, 51, 1):
src = 'http://www.cbooo.cn/Mdata/getMdata_movie?area=50&type=0&year=0&initial=%E5%85%A8%E9%83%A8&pIndex=' + str(i)
getHtml(src)
2.5 通过上面的操作,我们得到了返回的数据,但是返回的数据是Json格式的,所以我们需要解析它,然后从中获取每部电影的ID(可以找到每部电影都是这样的格式:后面的数字就是电影的ID,这是我们需要从返回的Json数据中获取的。)获取到ID后,形成电影链接,然后静态的操作页。
import requests
import json
def getHtml(src):
html = requests.get(src).content.decode('utf-8')
for con in json.loads(html)['pData']:
url = 'http://www.cbooo.cn/m/' + str(con['ID'])
newhtml = requests.get(url).content.decode('utf-8')
3.总结
获取动态数据的关键是找到“从页面获取数据的API”,然后找到数据链接之间的关系,然后对返回的数据进行分析,得到需要的数据。