通过简单的爬虫,爬取腾讯视频中的评论
进入腾讯视频首页,随机点进一个视频,在视频页复制一个评论,查看网页源码,ctrl + f 查找该评论,发现并没有该评论。
打开Fiddler进行抓包分析,刷新当前页面,找到相应的json文件,如下图:
复制该链接的URL,在浏览器中打开,可以看到具体的文本内容,可通过正则表达式提取评论。该页面只显示了一部分评论,我们点击查看更多评论,在Fiddler中找到更多评论的URL,然后对其进行分析:
我们可以观察链接只有一串数字不同,确定下一页评论的数字就可以获取更多的评论,fortunately , 在第一个网页中我们找到了这串数字,如下图:
编写代码:
import re
import urllib.request
urlPage = "https://video.coral.qq.com/varticle/5425558456" \
"/comment/v2?callback=_varticle5425558456commentv2&orinum=10&oriorder=o&pageflag=1&cursor=0" \
"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1592902226279"
pattern1 = 'content":"(.*?)","up"' # 提取评论的正则表达式
pattern2 = 'last":"(.*?)"' # 提取下一页的正则表达式
data = urllib.request.urlopen(urlPage).read().decode("utf-8", "ignore")
nextNum = re.compile(pattern2).findall(data) # 提取下一页URL中的数字
commentList = re.compile(pattern1).findall(data)
file = open("C:/Users/Echo/Desktop/result/comment.txt", "w", errors="ignore")
while len(commentList) > 0:
for i in range(len(commentList)): # 写入本地文件
file.write(commentList[i] + "\n")
nextUrl = "https://video.coral.qq.com/varticle/5425558456/comment/v2?callback=_varticle5425558456commentv2&" \
"orinum=10&oriorder=o&pageflag=1&cursor=" + str(nextNum[0]) + "&scorecursor=0&orirepnum=2&reporder=o&" \
"reppageflag=1&source=132&_=1592902226279" # 生成下一页的URL
data = urllib.request.urlopen(nextUrl).read().decode("utf-8", "ignore") # 获取信息
nextNum = re.compile(pattern2).findall(data) # 提取下一页URL中的数字
commentList = re.compile(pattern1).findall(data)
执行结果: