python 爬取腾讯视频评论的实现步骤

 更新时间:2021年02月18日 09:52:29   作者: 春日宴  
这篇文章主要介绍了python 爬取腾讯视频评论的实现步骤,帮助大家更好的理解和学习使用python爬虫,感兴趣的朋友可以了解下

一、网址分析

查阅了网上的大部分资料,大概都是通过抓包获取。但是抓包有点麻烦,尝试了F12,也可以获取到评论。以电视剧《在一起》为例子。评论最底端有个查看更多评论猜测过去应该是 Ajax 的异步加载。
网上的大部分都是构建评论的网址,通过 requests 获取,正则表达式进行数据处理。本文也利用该方法进行数据处理,其实利用 scrapy 会更简单。
根据前辈给出的经验,顺利找到了评论所在的链接。

在新标签中打开,该网址的链接。

评论都在"content":"xxxxx"里面,所有可以通过正则表达式获取。
那么现在要开始构建网址,找到其规律。
在查找评论链接的过程中无意发现,点击影评旁边的评论总数,可以获取到更为干净的评论界面。结果是一样的。

既然是要爬取所有的评论,所以知道评论数是必不可少的。

再通过F12获取到评论链接,找到网址的规律,构建网址,加载三四个评论就行了。这里加载了四个网址。把所有网址复制到文本文件中,进行对比分析。

观察发现只有 cursor 和 source 进行了改变,其他是不变的,二 source 是在第一个的基础上进行加一操作,所以只需要获取到 cursor 即可。我们打开一个评论链接的网址,我们可以知道,cursor 其实是上一页 最后一个用户的ID码。所以我们只需要在爬取上一页的时候一起爬虫了。然后就可以构建网址。

二、代码编写

这个代码还是简单的。套用之前上课做的模板就可以直接进行爬虫了。
通过正则表达式获取评论,返回一个列表;
正则表达式获得的 cursor 码是列表,所以要转化为字符串使用;
source 很简单了,直接在上一个的基础上加一即可。

def getComment(html): # 爬取单页评论

 findeComment = re.compile(r'"content":"(.*?)"', re.S)
 comment = re.findall(findeComment, html)
 # print(comment)
 return comment

def getCursor(html): # 获取下一页的cursor码
 findeCursor = re.compile(r'"last":"(.*?)"', re.S)
 cursor = re.findall(findeCursor, html)[0]
 # print(cursor)
 return cursor


def getSource(source): # 获取下一页的source码
 source = int(source) + 1
 return str(source)

有点难度的可能就送弄代理吧,但是代理可以模仿网上其他人的写法,所以还是不是很难。

#添加用户代理

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)

三、遇到的问题

1. 获取评论的时候也将子评论爬虫进去了。

仔细查看了源码,发现评论主要在 data 下面的 oriCommList 列表里,其他范围的评论为子评论。个人认为子评论也算有效评论,目前不打算处理。

2. 获取全部评论数,直接通过 requests 获取不到

尝试了 xpath 和 requests 发现不能获取全部评论数,所以目前只能通过 selenium 获取,但是 selenium 效率太低了,就获取一个评论总数,还不如打开源码直接修改评论总数,所以暂时没有修改

3. 评论总数数据太大

因为之前爬虫过很多网站,同一个 user-agent 很容易被 ban ,所以目前构建了用户代理,然后进行随机。其实还想加一个 ip 代理的,但是使用了 ip 代理的网址,上面写的正常的 ip ,在使用的时候,拒绝连接。也尝试过构建代理池。但是代理池一般都是使用docker 和 Redis 进行获取。暂时没有选用,之选用了用户代理,然后在获取 headers 的时候加个 time.sleep(1)。目前还是正常的。

4. 报错'utf-8' codec can't decode byte 0xff in position 1: invalid start byte

遇到这个问题,实在无语,我怀疑后面的评论是新出的 emjoy,然后utf-8不能识别,程序挂掉了。但是选取其他格式,在解释的过程估计还会挂掉,就暂时爬到1万条吧。

四、完整代码

代码仓库

以上就是python 爬取腾讯视频评论的实现步骤的详细内容,更多关于python 爬取腾讯视频评论的资料请关注脚本之家其它相关文章!

相关文章

  • Python调用系统命令os.system()和os.popen()的实现

    Python调用系统命令os.system()和os.popen()的实现

    这篇文章主要介绍了Python调用系统命令os.system()和os.popen()的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • pyqt实现.ui文件批量转换为对应.py文件脚本

    pyqt实现.ui文件批量转换为对应.py文件脚本

    今天小编就为大家分享一篇pyqt实现.ui文件批量转换为对应.py文件脚本,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 使用python实现ANN

    使用python实现ANN

    这篇文章主要为大家详细介绍了使用python实现ANN的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • python目标检测SSD算法训练部分源码详解

    python目标检测SSD算法训练部分源码详解

    这篇文章主要为大家介绍了python目标检测SSD算法训练部分源码详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 对pandas读取中文unicode的csv和添加行标题的方法详解

    对pandas读取中文unicode的csv和添加行标题的方法详解

    今天小编就为大家分享一篇对pandas读取中文unicode的csv和添加行标题的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • matplotlib共享坐标轴的实现(X或Y坐标轴)

    matplotlib共享坐标轴的实现(X或Y坐标轴)

    在作图的过程中,我们经常会遇到子图共用坐标轴的情况,或是共用横轴标轴,也可能是纵坐标轴。本文就介绍了matplotlib共享坐标轴,感兴趣的可以了解一下
    2021-05-05
  • pandas创建DataFrame的方式小结

    pandas创建DataFrame的方式小结

    今天给大家整理了pandas创建DataFrame的方式小结,现在我们就来看看这三种生成Dataframe的方式,每种方式通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-09-09
  • python-docx文件定位读取过程(尝试替换)

    python-docx文件定位读取过程(尝试替换)

    今天小编就为大家分享一篇python-docx文件定位读取过程(尝试替换),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python中的zip函数使用示例

    Python中的zip函数使用示例

    这篇文章主要介绍了Python中的zip函数使用示例,Python中的zip函数不是用来压缩文件的,而是用来传入参数返回一个tuple列表的,需要的朋友可以参考下
    2015-01-01
  • Python包的版本切换和更新方式

    Python包的版本切换和更新方式

    这篇文章主要介绍了Python包的版本切换和更新方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03

最新评论