腾讯视频热评爬虫(fiddler抓包js文件)

目标:爬取腾讯视频(三生三世十里桃花电视剧)热评

链接:https://v.qq.com/detail/j/j6cgzhtkuonf6te.html
腾讯视频热评爬虫(fiddler抓包js文件)_第1张图片
腾讯视频热评爬虫(fiddler抓包js文件)_第2张图片
因为f12源代码无法找到关于热评信息的代码,推测是存储在js文件,只能抓包获取
腾讯视频热评爬虫(fiddler抓包js文件)_第3张图片
左键查看更多(触发网络请求)腾讯视频热评爬虫(fiddler抓包js文件)_第4张图片
查找对应的js文件,解码并对比热评
腾讯视频热评爬虫(fiddler抓包js文件)_第5张图片
腾讯视频热评爬虫(fiddler抓包js文件)_第6张图片
完全一致,开始研究网页规律,并校验
发现网页的reqnum字段的值是评论个数
增大这个值相当于按查看更多
腾讯视频热评爬虫(fiddler抓包js文件)_第7张图片

腾讯视频热评爬虫(fiddler抓包js文件)_第8张图片
腾讯视频热评爬虫(fiddler抓包js文件)_第9张图片
腾讯视频热评爬虫(fiddler抓包js文件)_第10张图片
开始写代码

  1. 构造用户代理池爬取网页,根据热评个数reqnum构造网址
  2. 网页源代码中abstract对应热评,title对应热评标题
  3. 采用正则表达式提取并打印
  4. 最后加上异常处理

效果图
腾讯视频热评爬虫(fiddler抓包js文件)_第11张图片
源代码

import urllib.request
import re

num="20"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
        "Content-Type":"application/javascript",
         }
opener=urllib.request.build_opener()
headall=[]
for key,value in headers.items():
    item=(key,value)
    headall.append(item)
opener.addheaders=headall
urllib.request.install_opener(opener)
for j in range(0,100):
    #爬取当前评论页面
    print("第"+str(j)+"页")
    #thisurl="https://video.coral.qq.com/filmreviewr/c/upcomment/"+vid+"?commentid="+cid+"&reqnum="+num
    thisurl="https://video.coral.qq.com/filmreviewr/c/upcomment/j6cgzhtkuonf6te?reqnum="+num+"&callback=jQuery11240697380881603586_1573822838280&_=1573822838281"
    data=urllib.request.urlopen(thisurl).read().decode("utf-8")
    titlepat='"title":"(.*?)","abstract":"'
    #commentpat='"content":"(.*?)"'
    commentpat='"abstract":"(.*?)...",'
    titleall=re.compile(titlepat,re.S).findall(data)
    commentall=re.compile(commentpat,re.S).findall(data)
    lastpat='"last":"(.*?)"'
    cid=re.compile(lastpat,re.S).findall(data)[0]
    for i in range(0,len(titleall)):
        try:
            print("评论标题是:"+eval('u"'+titleall[i]+'"'))
            print("评论内容是:"+eval('u"'+commentall[i]+'"'))
            print("------")
        except Exception as err:
            print(err)

你可能感兴趣的:(python,爬虫,抓包)