抓包分析异步加载数据爬取评论

首页 » 爬虫 » 抓包分析异步加载数据爬取评论

加载数据分为同步加载和异步加载,同步加载也就是我前几篇的文章那样,只需要分析网站格式,研究网站的自动翻页,这些东西在客户端我们就能根据变化来分析自动翻页,从而可以爬取全站数据。但是,有些网站不是通过翻页来更新数据,而是通过Ajax异步加载来推送数据,(给咱们看到的就是往下一直拉,数据一直更新),而这些包在客户端的开发工具里是看不到的。不过可以通过第三方工具来进行抓包,这里我使用的抓包工具fiddler。关于fidder的配置, 你可以参考其他文章,主要就是设置一些代理的参数.

现在开始分析!这里我拿腾讯视频评论来作为实验,我随便选一个视频,最好是评论数多的

抓包分析异步加载数据爬取评论

类似于这种的都是通过js包来加载数据,现在我们要打开fiddler,然后刷新一下网页,你会发现fiddler出现了好多数据,这个时候先别急,因为他会一直在变动,等他不变了的时候,咱们ctrl+x或者输入命令clear清一下屏,这是为了后边针对性的分析,此时你可以点一下查看更多评论,你会在fiddler上看到一个js的头标

抓包分析异步加载数据爬取评论

这个时候你可以点击右边TextView会出现这些

抓包分析异步加载数据爬取评论

ok 下面就该看看这些都是些什么玩意,上边的稍微知道点英语都能看懂,但是下面的是什么东西,其实这是一种编码,咱们复制一些解码看一下。

抓包分析异步加载数据爬取评论
抓包分析异步加载数据爬取评论

正好符合,那下面就该分析js包的规律了

咱们先点击查看更多,保存js地址,再点击一次,再保存地址,循环3次就够摸索规律了,下面是我的结果

  1. https://video.coral.qq.com/filmreviewr/c/upcomment/j6cgzhtkuonf6te?callback=_filmreviewrcupcommentj6cgzhtkuonf6te&reqnum=3&source=132&commentid=6227734628246412645
  2. https://video.coral.qq.com/filmreviewr/c/upcomment/j6cgzhtkuonf6te?callback=_filmreviewrcupcommentj6cgzhtkuonf6te&reqnum=3&source=132&commentid=6232162852904795079
  3. https://video.coral.qq.com/filmreviewr/c/upcomment/j6cgzhtkuonf6te?callback=_filmreviewrcupcommentj6cgzhtkuonf6te&reqnum=3&source=132&commentid=6234994465071252337

这个时候我们发现变化的只有commentid,但是是怎么变得,咱还是要分析一下,你打开第一个网址,你会发现有个last的字段,再看一下个发现还是,那就能确定这个js包的last字段指向的是下一个js包的地址

抓包分析异步加载数据爬取评论

ok 目前虽然分析的是地址,但为了保险,咱们测试一下先把所有的js地址的commentid看看能不能拿下来

抓包分析异步加载数据爬取评论

有了这些js地址,下面的就没啥好说的了,分析一下就可以开始爬了

抓包分析异步加载数据爬取评论
抓包分析异步加载数据爬取评论

代码简单,这里主要就是分析Ajax内容

import urllib.request
import re
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
key="6227734628246412645"
while(True):
    url2 = "https://video.coral.qq.com/filmreviewr/c/upcomment/j6cgzhtkuonf6te?callback=_filmreviewrcupcommentj6cgzhtkuonf6te&reqnum=3&source=132&commentid="+key
    try:
        data=urllib.request.urlopen(url2).read().decode("utf-8","ignore")
        pat1='"last":"(.*?)"'
        last=re.compile(pat1).findall(data)
        key=last[0]
        pat2='"title":"(.*?)","abstract":"'
        title=re.compile(pat2).findall(data)
        pat3='"content":"(.*?)"'
        com=re.compile(pat3).findall(data)
        for i in range(0,len(title)):
            print("标题:"+eval('u"'+title[i]+'"'))
            print("评论:"+eval('u"'+com[i]+'"'))
    except Exception as err:
        pass


 

分享到:
赞(1) 打赏

评论 5

评论前必须登录!

 

  1. #1

    不错

    白云8个月前 (03-27)
  2. #2

    以后多多交流

    你好8个月前 (03-27)
  3. #3

    我给你点赞了

    小蚯蚓8个月前 (03-28)
  4. #4

    沥青8个月前 (03-28)
  5. #5

    我也是小白以后多多交流

    靓仔8个月前 (03-28)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00