• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
123457443 显示全部楼层 发表于 2021-10-25 19:23:27 |阅读模式 打印 上一主题 下一主题
目录


  • 一、网址分析
  • 二、代码编写
  • 三、碰到的题目

    • 1. 获取品评的时候也将子品评爬虫进去了。
    • 2. 获取全部品评数,直接通过 requests 获取不到
    • 3. 品评总数数据太大
    • 4. 报错'utf-8' codec can't decode byte 0xff in position 1: invalid start byte

  • 四、完备代码

一、网址分析


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

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

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

既然是要爬取全部的品评,所以知道品评数是必不可少的。

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

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


二、代码编写


这个代码照旧简朴的。套用之前上课做的模板就可以直接进行爬虫了。
通过正则表达式获取品评,返回一个列表;
正则表达式得到的 cursor 码是列表,所以要转化为字符串利用;
source 很简朴了,直接在上一个的底子上加一即可。
  1. def getComment(html): # 爬取单页评论
  2. findeComment = re.compile(r'"content":"(.*?)"', re.S)
  3. comment = re.findall(findeComment, html)
  4. # print(comment)
  5. return comment
  6. def getCursor(html): # 获取下一页的cursor码
  7. findeCursor = re.compile(r'"last":"(.*?)"', re.S)
  8. cursor = re.findall(findeCursor, html)[0]
  9. # print(cursor)
  10. return cursor
  11. def getSource(source): # 获取下一页的source码
  12. source = int(source) + 1
  13. return str(source)
复制代码
有点难度的大概就送弄署理吧,但是署理可以模仿网上其他人的写法,所以照旧不是很难。
  1. #添加用户代理
  2. def ua(uapools):
  3. thisua = random.choice(uapools)
  4. # print(thisua)
  5. headers = ("User-Agent", thisua)
  6. opener = urllib.request.build_opener()
  7. opener.addheaders = [headers]
  8. # 设置为全局变量
  9. 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 爬取腾讯视频品评的资料请关注草根技能分享别的干系文章!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作