动态抓取之腾讯视频

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

腾讯视频

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

既然要获取数据,那我们肯定要先找到请求数据的代码在哪儿,打开Chrome浏览器的开发者工具,我们选中network选项

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&appkey=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里面才是真正的数据,而results对应的value是一个列表,分析清楚了接下来获取数据就简单了,直接上代码:

# -*- 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&appkey=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,所以只需要动态的改变请求链接,就能抓取所有的数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,523评论 25 708
  • 主人,我是你的大脑。就是那个你失败的时候,被你说“脑袋”不好的大脑。当别人成功了,你在说:“他脑子好聪明呀!我怎么...
    我的笔记阅读 889评论 0 0
  • 不知不觉中两个月的暑假已经结束了,总的来说我的暑假过的是比较好的。开始的时候本来是在徽州食府工作的,因为来了个长期...
    无需理由阅读 235评论 0 2
  • 假如我是一阵风我愿生在夏季拥抱蓝天和白云亲吻树叶和大地奔向海与那鲲鹏扶摇直上九万里化作细雨润人心
    谢勿念阅读 245评论 4 2