究极福利带你Python爬虫| 爬取腾讯视频评论

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云,作者:Python进击者

文章目录:

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

一、前提条件

安装了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()

四、结果展示

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中获取经纬度天气信息的方法可以通过使用爬虫来获取城市七日天气预报。首先需要拼接URL,然后使用请求库发送请求获取数据。接着使用正则表达式提取经纬度信息,并将数据保存到相应的txt文件中。在获取经纬度信息之前,需要先获取城市的地址信息。可以使用百度地图的geocoder接口来获取地址的经纬度信息。最后,可以通过提取的经纬度信息来获取天气预报。 具体实现步骤如下: 1. 首先,需要安装requests和re两个Python库。这两个库可以通过pip命令进行安装。 2. 使用requests库发送GET请求获取城市的经纬度信息。可以使用百度地图的geocoder接口来获取地址的经纬度信息。例如,可以发送一个GET请求到如下URL来获取南京市江宁区的经纬度信息:http://api.map.baidu.com/geocoder?address=南京市江宁区&output=json&key=37492c0ee6f924cb5e934fa08c6b1676。其中,地址参数可以替换为你所需要获取天气预报的城市。 3. 解析返回的JSON数据,提取出经纬度信息。 4. 使用经纬度信息构造URL,发送GET请求获取天气预报数据。可以使用爬虫技术来获取天气预报数据。例如,可以发送一个GET请求到如下URL来获取南京市江宁区的七日天气预报数据:http://typhoon.weather.com.cn/data/typhoonFlash/经度.xml。其中,经度可以替换为上一步获取到的经度信息。 5. 解析返回的XML数据,提取出天气预报信息。 综上所述,可以使用Python编写一个爬虫程序来获取经纬度天气信息。请注意,具体实现细节可能因为数据源的变化而有所不同,需要根据实际情况进行相应的调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python 爬取任意指定城市的天气预报](https://blog.csdn.net/boysoft2002/article/details/120583130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [python ---超级。无敌之究极简单之获取台风经纬度](https://blog.csdn.net/weixin_39450931/article/details/100080284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值