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

2020-01-15 262次浏览 已收录 5个评论

加载数据分为同步加载和异步加载,同步加载也就是我前几篇的文章那样,只需要分析网站格式,研究网站的自动翻页,这些东西在客户端我们就能根据变化来分析自动翻页,从而可以爬取全站数据。但是,有些网站不是通过翻页来更新数据,而是通过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


 


渣渣龙, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:抓包分析异步加载数据爬取评论
喜欢 (0)

您必须 登录 才能发表评论!

(5)个小伙伴在吐槽
  1. 不错
    白云2020-03-27 13:22
  2. 以后多多交流
    你好2020-03-27 13:48
  3. 我给你点赞了
    小蚯蚓2020-03-28 16:37
  4. 沥青2020-03-28 17:03
  5. 我也是小白以后多多交流
    靓仔2020-03-28 17:54