开启辅助访问
 找回密码
 立即注册

如何用Python爬取腾讯视频评论?

陈先汉 回答数4 浏览数176585
zouyu | 未知
这个实现起来不难,腾讯视频的评论信息是动态加载的,存储在一个js文件中,只要抓包分析,找到存储评论信息的这个js文件,然后解析这个文件获取评论信息就行。下面我介绍一下,如何爬取腾讯视频评论信息,实验环境win7+python3.6+pycharm,主要步骤如下:
1.抓包分析,找到存储评论信息的js文件。按F12调出开发者工具,刷新页面,我这里以抓取网页版"乡10(上)"的评论为例,爬取某一页评论信息,也就10条评论,如下图:

对应找到headers信息,可以看到请求js文件的url地址,以及请求方法get,如下图:

2.根据以上分析的结果,我们就可以构建爬取代码,我这里为了方便演示,主要用到了如下几个包:requests,json,time,re,主要抓取了userid,nick,time,content这四个字段的评论信息,主要代码如下,这里需要你填入自己的cookie:

3.程序运行结果如下,已经成功打印出评论信息,包括"用户id","用户昵称","评论日期","评论内容",四个字段信息:

至此,就已完成的腾讯评论信息的抓取。就整个过程来看,其实不难,和平时抓取网页动态新的基本流程一致,就是先抓包分析,然后解析文件,提取数据,这里需要的注意的是,腾讯视频的评论信息js文件不是一个标准json文件格式,需要正则表达式先匹配一下,然后才能使用json包进行处理,其他没有什么难处,只要会基本的爬虫基础,熟悉熟悉抓取流程,很快就能掌握爬取评论信息,我也回答过许多这方面的问题,你可以参考一下,希望以上分享的内容能对你有所帮助吧。
用Deepseek满血版问问看
回复
使用道具 举报
7168406 | 未知
先放出源代码。
1.# coding:utf-8
2.
3.import urllib.request
4.import json
5.import re
6.import requests
7.import codecs
8.
9.# request head
10.head = {'User-Agent': \
11.            'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36'}
12.
13.# 查找并返回网页vid,测试用的,实际程序没用到
14.def find_vid(web_adress):     
15.html_text = urllib.request.urlopen(web_adress).read()     
16.tag1 = re.findall(r'var .+?};', str(html_text))     
17.tag = ''     
18.for eco in tag1:         
19.tag2 = re.findall(r'vid: "(.+?)",', eco)        
20.if not tag2 == []:            
21.tag = tag2[0]   
22.return tag
23.
24.# 查找并返回网页的comment_id
25.def find_comment_id(web_adress):
26.    html_text = urllib.request.urlopen(web_adress).read()     
27.tag = re.findall(r'"comment_id":"(\d+)"', str(html_text))   
28. return tag[0]
29.
30.
31. web_orig = r'http://v.qq.com/detail/q/qviv9yyjn83eyfu.html' # 《花千骨》首页
32.html_text = urllib.request.urlopen(web_orig).read() # 读取html源代码
33.# 在html文件中找到58季的vid
34.tag1 = re.findall(r'<a href=".+?vid=.+?</a>', str(html_text))
35 tag2 = list()
36.for i in tag1:
37    if r'episodeNumber' in i:
38.        tag2.append(i)
39. vid = list()
40.for i in tag2:
41.    vid = vid + re.findall(r'vid=(.+?)"', i)
42.
43.# 把评论存在文档里
44.file = codecs.open('comment.txt', 'w+','utf-8')
45.for i in vid:
46.    web_find_comment_id = r'http://ncgi.video.qq.com/fcgi-bin/video_comment_id?otype=json&op=1&vid=' + i     
47.comment_id = find_comment_id(web_find_comment_id)   
48. web_json = 'http://coral.qq.com/article/' + comment_id + '/comment?commentid=0&reqnum=20'     
49.jscontent = requests.get(web_json, headers=head).content   
50.jsDict = json.loads(jscontent.decode())     
51.jsData = jsDict['data']     
52.comments = jsData['commentid']   
53.for each in comments:        
54.# print(each['content'].encode('utf-8').decode())         55.file.write(str(each['content']))         
56.file.write('\n')  file.close()
57.
58.file.close()



关键的几个按钮已经画出来了。要找comment这个文件是通过下来看下面的评论点击更多的时候会有很多文档加载,一开始要逐个逐个审查才能知道comment这个文档是存放评论的。双击comment文档跳转到存放评论的页面

评论的加载是用了json技术,是动态网页,通过修改后面的reqnum的数字来增加评论,后面的一串代码可以删掉,不影响。去查看《花千骨》首页的html源码是没有显示这些内容的,说明这是json动态网页,爬取动态 网页跟静态网页多了一些步骤。对网页后面的网址进行修改,查看哪些是我们必要的,还没学数据库只能这样一步一步来。 在comment的网址里有两个重要的数字:1164894469, 6199937952627907765。其中经过测试6178065997993949867是随机的,可以改成0,而1410730408是固定的,要从网页中获取。(现阶段做爬虫只能这样逐个审查元素的,毕竟我还没学网页的制作,只能这样摸着墙壁走路了)。爬取动态网页的难点就在这里,如何才能让程序自动找到这串数字。首先我们可以到首页的源码里面查找一下是否存在这串数字,发现是没有的。但是我们返回到审网页的元素查看那里通过过滤器能找到存放comment_id这个ID的JSON文件。很像我们查找comment的json文件一样。

双击进入到这个文件,能看到里面有我们需要的comment_id就是1164894469。但是这个地址太长了,逐步删除部分内容,只要能显示出我们需要的comment_id就可以了。最终得到http://ncgi.video.qq.com/fcgi-bin/video_comment_id?otype=json&op=3&vid=n0016ibg4eb 这个地址就是最精简的了。经测试op的数字可以改成1,2,3等数字,而vid猜猜意思应该就是video_id的意思,就是视频的id,可以到通过html源码来审查出n0016ibg4eb就是第一集的vid,后面的58集也在html中能找到。
所以现在的思路很清晰了,python通过在花千骨首页的html源代码找出58集视频的vid,然后通过vid找出comment_id,最后就能找到用户评论的json文件了。顺便说说在用户评论的json文件里面评论是在里面的content里,python里面的字典功能能轻松把评论突出出来。
在写爬虫的时候遇到的困难主要是如何找出comment的json文件,如何找出comment_id,如何只把58集的comment选出来(首页里面还有很多视频连接,所有有很多个vid,如何通过re模块筛选出来我看了html文件对比了很久,以后应该轻松很多了吧。),最后的问就是编码问题了。Python的编码问题真的很坑新手,特别是我不知道表情图的编码的存在,不能中文和表情很好地写入到文件里。找了一下资料发现现在是用GB18030的编码,通过codecs这个模块终于顺利地把中文和表情写入到文件里。


关注菜鸟学Python,分享更多学习技巧!
回复
使用道具 举报
jianwen815 | 未知
在极客学院,慕课网,近一个月的Python网易云课堂学习,想尝试写一个爬虫,一个小程序,参考家,花了一天的磕磕碰碰最后代码,记录学习过程。很多地方都不太了解,慢慢去摸吧。该程序的主要功能是在腾讯视频中抓取58组“花骨头”的每一组用户注释(程序每台只能爬10件,节省一点时间)。

在这里还是要推荐下我自己建的Python开发学习群:628979297,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴
首先发布源代码。
# coding:utf-8import urllib.requestimport jsonimport reimport requestsimport codecs# request headhead = {'User-Agent': \            'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36'}# 查找并返回网页vid,测试用的,实际程序没用到def find_vid(web_adress):     html_text = urllib.request.urlopen(web_adress).read()     tag1 = re.findall(r'var .+?};', str(html_text))     tag = ''     for eco in tag1:         tag2 = re.findall(r'vid: "(.+?)",', eco)        if not tag2 == []:             tag = tag2[0]    return tag# 查找并返回网页的comment_iddef find_comment_id(web_adress):     html_text = urllib.request.urlopen(web_adress).read()     tag = re.findall(r'"comment_id":"(\d+)"', str(html_text))    return tag[0]   web_orig = r'http://v.qq.com/detail/q/qviv9yyjn83eyfu.html' # 《花千骨》首页html_text = urllib.request.urlopen(web_orig).read() # 读取html源代码# 在html文件中找到58季的vidtag1 = re.findall(r'


几个关键按钮已经画出来了。欲寻求评论,本文档将通过点击阅读以下评论。单击更频繁,将加载大量的文档。首先,我们需要逐一检查,以了解评论是一个评论文件。双击注释文档跳转到审阅页面。

注释的加载基于JSON技术,这是一个动态网页。它可以添加修改背后的reqnum数的评论,和一个字符串的代码后面可以被删除而不影响。看到华茜骨页的html源代码并没有显示这些内容,这意味着这是JSON动态网页。有很多步骤可以用静态网页抓取动态网页。要修改网站背后的网站,看看哪些是必要的,而不是学习数据库只能一步一步来。

双击这个文件,我们需要看到comment_id里面是1164894469。但地址太长,逐步删除内容的一部分,只要我们能显示comment_id我们需要。最后得到http://ncgi.video.qq.com/fcgi-bin/video_comment_id?O = JSON和OP = 3 = n0016ibg4eb VID
所以现在的思路很清晰。Python中找出58西元组影片通过HTML花千骨的网页源代码,然后发现comment_id通过视频,最后发现用户的JSON文件的评论。顺便说一下,用户评论中JSON文档中的注释在内容里面,Python内部的字典函数可以很容易地突出注释。
创作时遇到的主要困难是如何找到爬虫评论JSON文件,如何找到comment_id,如何设置评论只有58选(也有很多家视频连接,都有大量的视频,如何通过re模块选择我的HTML很长一段时间,对比应该很容易吧)。最后一个问题是编码问题。Python的编码问题真的是新手,尤其是如果我不知道面部表情的编码,它不能用中文写出来,并且很好地表达到文件中。寻找一个比特的信息,发现现在使用GB18030编码,中国和面部表情成功写入文件的编解码模块。
记录下你的第一个小爬虫,准备语言分析,不知道会有多少个弹坑。
我希望有一个伟大的神教导。
回复
使用道具 举报
aglw100 | 未知
Python网络数据采集,Python+爬虫学习系列教程,网络爬虫-Python和数据分析三本Python书籍百度网盘下载地址:https://pan.baidu.com/s/19Ak0tXcFAED7pl_r7_VRnA
回复
使用道具 举报
快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影