网页抓取qq(腾讯视频的VIP电影动态抓取(第二十五期))

优采云 发布时间: 2021-10-21 00:13

  网页抓取qq(腾讯视频的VIP电影动态抓取(第二十五期))

  今天我们就来聊聊动态爬取。所谓动态爬取,其实就是我们在爬取网页数据的时候。待抓取的数据在查看网页源代码时找不到对应的数据。比如我们要抓取腾讯视频的VIP电影

  

  腾讯视频

  如上图,网页中有,但查看源码时,源码中没有;这是怎么回事,这其实是因为它的数据是动态加载的,一般是通过js代码实时到服务器端来获取数据,接下来我们抓取这样的东西网站。

  既然要获取数据,首先要找出请求数据的代码在哪里,打开Chrome浏览器的开发者工具,选择网络选项

  

  Chrome 开发者工具

  然后我们刷新一下我们要爬取的网页,下面可以看到很多东西,一般请求的代码在XHR或者JS中,所以我们直接找这两个,通过搜索可以看到到如下结果:

  

  好像是这个文件请求的数据。接下来我们选择Headers查看其请求地址

  

  我们复制这个请求链接,直接在浏览器中打开

  

  看来,这确实是我们要找的。它的数据类型是json类型,所以我们只需要抓取数据,然后解析就可以了!接下来开始写代码:

  首先是捕获json数据:

  # -*- coding:utf-8 -*-

import requests

url = 'http://list.video.qq.com/fcgi-bin/list_common_cgi?otype=json&novalue=1&platform=1&version=10000&intfname=web_vip_movie_new&tid=687&a*敏*感*词*ey=c8094537f5337021&appid=200010596&type=1&sourcetype=1&itype=-1&iyear=-1&iarea=-1&iawards=-1&sort=17&pagesize=30&offset=0&callback=jQuery19108734160972013745_1494380383266&_=1494380383271'

data = requests.get(url).content

print data

  

  输出结果

  捕获数据后,下一步就是解析数据。因为是json类型,我们导入json包进行分析。首先用正则表达式去掉前面不相关的jQuery1910...那个字符串,只留下这个字符串{"cgi_cost_time:...}的数据从链接打开的网页结果中可以看出我们刚刚复制了请求,需要的数据在{...;'jsonvalue':{...;'results':[. ..];...};...},也就是key字典中是jsonvalue,jsonvalue的值是一个字典,这个字典中的key值是results.data,results对应的值是一个list,分析清楚后,很容易得到数据,直接上代码:

  # -*- coding:utf-8 -*-

import requests

import json

import re

url = 'http://list.video.qq.com/fcgi-bin/list_common_cgi?otype=json&novalue=1&platform=1&version=10000&intfname=web_vip_movie_new&tid=687&a*敏*感*词*ey=c8094537f5337021&appid=200010596&type=1&sourcetype=1&itype=-1&iyear=-1&iarea=-1&iawards=-1&sort=17&pagesize=30&offset=0&callback=jQuery19108734160972013745_1494380383266&_=1494380383271'

data = requests.get(url).content

# print data

#正则表达式去除不相干数据

data = re.search(re.compile(r'jQuery.+?\((.+)+\)'),data)

if data is not None:

a = json.loads(data.group(1))

data = a['jsonvalue']['results'] #找到results这个列表

#遍历列表

for i in data:

#列表中的值为字典,所以用字典取对应的值

print u'电影名称: '+i['fields']['title']

print u'电影简介: '+i['fields']['second_title']

print u'电影封面: '+i['fields']['vertical_pic_url']

print u'电影评分: '+i['fields']['score']['score']

print u'电影ID: '+i['id']

print '\n'

  

  输出结果

  然后得到数据。当然,这只是爬取一页的内容。如果我们想抓取所有页面,可以多次点击页面的下一页,然后对比请求链接,可以找到请求链接规律

  

  请求链接

  通过对比可以发现,每添加一个页面,这个数字就增加30个,所以只需要动态改变请求链接就可以捕获所有数据。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线