搜索
您的当前位置:首页正文

动态抓取之腾讯视频

来源:哗拓教育

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

腾讯视频

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

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

Chrome开发者工具

接着我们刷新一下我们要抓取的网页,可以看到下面多出来很多的东西,一般请求的代码都是在XHR或者JS中的,所以我们直接在这两项中去找,通过查找我们能看到如下结果:

看来就是这个文件请求的数据啦,接下来我们选择Headers查看它的请求地址

我们把这个请求链接复制下来,然后直接在浏览器中打开呢

看来确实是我们要找的内容,它的数据类型是一个json类型,所以我们只需要把数据抓取下来,然后解析就能够搞定啦!接下来开始写代码:

首先是抓取得到json数据:

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

import requests

url = 

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 = 

data = requests.get(url).content
# print data

#正则表达式去除不相干数据
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,所以只需要动态的改变请求链接,就能抓取所有的数据。

Top