专栏首页JAVAandPython君Python爬虫| 实战爬取腾讯视频评论

Python爬虫| 实战爬取腾讯视频评论

本文由易某某投稿 CSDN:https://me.csdn.net/weixin_42572590 转载私聊公众号即可

文章目录:

  • 一、前提条件
  • 二、分析思路
  • 三、代码编写
  • 四、结果展示

一、前提条件

  • 安装了Fiddler了(用于抓包分析)
  • 谷歌或火狐浏览器
  • 如果是谷歌浏览器,还需要给谷歌浏览器安装一个SwitchyOmega插件,用于代理服务器
  • 有Python的编译环境,一般选择Python3.0及以上

声明:本次爬取腾讯视频里 《最美公里》纪录片的评论。本次爬取使用的浏览器是谷歌浏览器

二、分析思路

1、分析评论页面

根据上图,我们可以知道:评论使用了Ajax异步刷新技术。这样就不能使用以前分析当前页面找出规律的手段了。因为展示的页面只有部分评论,还有大量的评论没有被刷新出来。

这时,我们应该想到使用抓包来分析评论页面刷新的规律。以后大部分爬虫,都会先使用抓包技术,分析出规律!

2、使用Fiddler进行抓包分析——得出评论网址规律

fiddler如何抓包,这个知识点,需要读者自行去学习,不在本博客讨论范围。

把上面两张图里面的内容对比一下,可以知道这个JS就是评论存放页面。(这需要大家一个一个找,一般Ajax都是在JS里面,所以这也找JS进行对比即可)

我们复制这个JS的url:右击 > copy > Just Url

大家可以重复操作几次,多找几个JS的url,从url得出规律。下图是我刷新了4次得到的JS的url:

根据上图,我们发现url不同的地方有两处:一是cursor=?;二是_=?。

我们很快就能发现 _=?的规律,它是从1576567187273加1。而cursor=?的规律看不出来。这个时候如何去找到它的规律呢?

  1. 百度一下,看前人有没有爬取过这种类型的网站,根据他们的规律和方法,去找出规律;
  2. 羊毛出在羊身上。我们需要有的大胆想法——会不会这个cursor=?可以根据上一个JS页面得到呢?这只是很多大胆想法中的一个,我们就一个想法一个想法的试试。

我们就采用第二种方法,去js里面找。复制其中一个url为:

url = https://video.coral.qq.com/varticle/3242201702/comment/v2?callback=_varticle3242201702commentv2&orinum=10&oriorder=o&pageflag=1&cursor=6460163812968870071&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1576567187273

去浏览器里面打开,在里面搜索一下此url的下一个url的cursor=?的值。我们发现一个惊喜!

如下:

一般情况下,我们还要多试几次,确定我们的想法是正确的。

至此,我们发现了评论的url之间的规律:

  • _=?从1576567187273加1
  • cursor=?的值存在上面一个JS中。

三、代码编写

import re
import random
import urllib.request

#构建用户代理
uapools=["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
         "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
         "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0",
        ]
#从用户代理池随机选取一个用户代理
def ua(uapools):
    thisua=random.choice(uapools)
    #print(thisua)
    headers=("User-Agent",thisua)
    opener=urllib.request.build_opener()
    opener.addheaders=[headers]
    #设置为全局变量
    urllib.request.install_opener(opener)

#获取源码
def get_content(page,lastId):
    url="https://video.coral.qq.com/varticle/3242201702/comment/v2?callback=_varticle3242201702commentv2&orinum=10&oriorder=o&pageflag=1&cursor="+lastId+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_="+str(page)
    html=urllib.request.urlopen(url).read().decode("utf-8","ignore")
    return html

#从源码中获取评论的数据
def get_comment(html):
    pat='"content":"(.*?)"'
    rst = re.compile(pat,re.S).findall(html)
    return rst

#从源码中获取下一轮刷新页的ID
def get_lastId(html):
    pat='"last":"(.*?)"'
    lastId = re.compile(pat,re.S).findall(html)[0]
    return lastId

def main():
    ua(uapools)
    #初始页面
    page=1576567187274
    #初始待刷新页面ID
    lastId="6460393679757345760"
    for i in range(1,6):
        html = get_content(page,lastId)
        #获取评论数据
        commentlist=get_comment(html)
        print("------第"+str(i)+"轮页面评论------")
        for j in range(1,len(commentlist)):
            print("第"+str(j)+"条评论:" +str(commentlist[j]))
        #获取下一轮刷新页ID
        lastId=get_lastId(html)
        page += 1

main()

四、结果展示

本文分享自微信公众号 - JAVAandPython君(JAVAandPythonJun),作者:易某某

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JAVAWeb| 详解JSP技术、指令、隐式对象、标签

    首先,我们来了解一下JSP这个东东,大家看它的缩写可能有点懵逼,告诉大家全称之后可能会更容易理解,JSP全称:Java Server Page ,直译过来便是...

    Python进击者
  • 【每日小知识】正向代理and反向代理

    Python进击者
  • Python爬虫|你真的会写爬虫吗?

    咱们直接进入今天的主题---你真的会写爬虫吗?为啥标题是这样,因为我们日常写小爬虫都是一个py文件加上几个请求,但是如果你去写一个正式的项目时,...

    Python进击者
  • Ajax Step By Step1

    jQuery 对 Ajax 做了大量的封装,不需要去考虑浏览器兼容性, 对于封装的方式,jQuery 采用了三层封装:最底层的封装方法为:$.ajax(),而通...

    wfaceboss
  • Python flask框架如何显示图像到web页面

    先用py绘制了xy的图像,然后经过几个命令,让其转化为plot_url,在传给plot.html,就可以了

    砸漏
  • 大规模异步新闻爬虫【4】:实现一个同步定向新闻爬虫

    前面,我们先写了一个简单的百度新闻爬虫,可是它槽点满满。接着,我们实现了一些模块,来为我们的爬虫提供基础功能,包括:网络请求、网址池、MySQL封装。

    一墨编程学习
  • 基于Django的电子商务网站开发(连载36)

    顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscr...

    小老鼠
  • Vue成神之路之内部指令

    vue.js——开发版本:包含完整的警告和调试模式 vue.min.js——生产版本:删除了警告,进行了压缩

    小胖
  • 5200 万用户数据泄露 谷歌将提前 4 个月关闭 Google+

    谷歌周一表示,将于明年4月关闭Google+社交媒体服务,比原计划提前4个月。此前,该公司今年第二次发现Google+的软件漏洞,新漏洞导致合作伙伴应用能访问用...

    周俊辉
  • python破解知乎爬虫技术架构

    去年自己开发了一个知乎爬虫系统,我现将整个技术思路和架构整理出来分享给大家,希望对大家有帮助。

    孔雀

扫码关注云+社区

领取腾讯云代金券