Python 爬取腾讯电视剧评论,python腾讯电视剧,定向爬取腾讯电视剧评


定向爬取腾讯电视剧评论

本例思路:打开评论页面,通过fiddler提取加载评论页面的网址,对比分析url,构造内容和用户pattern,然后爬取输出。


1,打开电视剧如果爱页面https://v.qq.com/x/cover/zjfjxmtdzhowjoz.html,找到下图影评位置,

技术分享图片

2 、点击后面的数字(38535),进入评论页面http://coral.qq.com/2701618945


技术分享图片

在点击到最新的视乎,查看fiddler提取的网址,复制出来


3、点击2次 查看更多评论,查看fiddler提取的两次网址,复制出来

技术分享图片

技术分享图片


4、对比分析加载评论的网址

该页面加载最新的评论显示也,coral.qq.com/article/2701618945/comment/v2?callback=_article2701618945commentv2&orinum=10&oriorder=t&pageflag=1&cursor=0&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_=1528358764027

下一个加载coral.qq.com/article/2701618945/comment/v2?callback=_article2701618945commentv2&orinum=10&oriorder=t&pageflag=1&cursor=6410399564898481102&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_=1528358764028

第二个加载coral.qq.com/article/2701618945/comment/v2?callback=_article2701618945commentv2&orinum=10&oriorder=t&pageflag=1&cursor=6410398608228072596&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_=1528358764029

观察三个网址之间的差异,可以分析出下面结果:cursor为下面加载内容的起始数据位置,且没有增长规律

-->1 页面每次加载10条评论,cursor为下面加载内容的起始数据位置,且没有明显的数学变化规律

-->2 多次出现的2701618945,经过分析 应该是视频编号,该标号对应《如果爱》的评论

-->3 最后一个变化的参数&_=1528358764028,这里的数字具有自增长规律 +1 增长。

-->4 通过后两个网址内容分析,"last":"6410398608228072596"为第一次加载的最后一个评论的数据id,而且在此页面内容中last值是唯一的,用来作为新加载的起始数据位置

所以可以分析得到URL格式:

url="http://coral.qq.com/article/2701618945/comment/v2?callback=_article2701618945commentv2&orinum=10&oriorder=t&pageflag=1&cursor="+cursor_id+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_="+str(str_id)


5.打开加载更多评论的网址,分析内容

技术分享图片

技术分享图片


技术分享图片

"region":"\u4e2d\u56fd:\u5e7f\u4e1c:\u4e1c\u839e"

"nick":"\u7738"

"content":"\u8fd9\u4e2a\u5a46\u5a46\u75c5\u7684\u4e0d\u8f7b\u65e0\u6cd5\u6cbb\u4e86"

用python命令执行出结果,分析这个编码的对应意思

>>> print U"\u8fd9\u4e2a\u5a46\u5a46\u75c5\u7684\u4e0d\u8f7b\u65e0\u6cd5\u6cbb\u4e86"

这个婆婆病的不轻无法治了

>>> print U"\u7738"

>>> print u"\u4e2d\u56fd:\u6c5f\u897f:\u666f\u5fb7\u9547"

中国:江西:景德镇


由上面的对比知道,“content”是评论内容;“nick”是用户名;“region”是网友地址;


根据这些内容,构造pattern

curpat='"last":"(.*?)",'#位置id

userpat='"nick":"(.*?)",'#用户名

contpat='"content":"(.*?)",'#评论内容

addrpat='"region":"(.*?)",'#用户地址



6 根据上面的分析编写代码

#!/usr/bin/envpython#-*-coding:utf-8-*-importreimporturllib.requestimporttimeimporturllib.error##模拟浏览器安装headersheaders=("User-Agent","Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/65.0.3325.181Safari/537.36")opener=urllib.request.build_opener()opener.addheaders=[headers]urllib.request.install_opener(opener)#视频编号vid="2701618945"#起始评论编号cursor_id="6410110614791238846"#str_id是自增参数,用数字,不加引号""str_id=1528290248106#构造通用urlurl="http://coral.qq.com/article/2701618945/comment/v2?callback=_article2701618945commentv2&orinum=10&oriorder=t&pageflag=1&cursor="+cursor_id+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_="+str(str_id)#定义patterncurpat='"last":"(.*?)",'userpat='"nick":"(.*?)",'contpat='"content":"(.*?)",'#定义用户列表,用于分块输出u_list=[]foriinrange(1,10):data=urllib.request.urlopen(url).read().decode('utf-8')data=str(data)#设置处理时间,防止被timeout和屏蔽time.sleep(3)forjinrange(0,10):next_curid=re.compile(curpat).findall(data)[0]content_list=re.compile(contpat).findall(data)userlist=re.compile(userpat).findall(data)try:#输出解码后的用户评论print("评论内容是:"+eval('u"'+content_list[j]+'"'))#处理无法解析uncode编码的异常exceptExceptionase:print("***********该条评论含有有特殊字符************")continueurl="http://coral.qq.com/article/2701618945/comment/v2?callback=_article2701618945commentv2&orinum=10&oriorder=t&pageflag=1&cursor="+next_curid+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=1&_="+str(str_id+1)print("-------------------------------------")#添加提取的用户到列表foriteminuserlist:u_list.append(item)#循环集中输出用户forkinrange(0,len(u_list)):try:print("用户名是:"+eval('u"'+u_list[k]+'"'))exceptExceptionase:print("***********用户名有特殊字符************")continue

执行结果:


技术分享图片


到此完毕,已上代码可以直接应用,随着时间推移,连接与页面内容可能有变化,可灵活分析使用





Python 爬取腾讯电视剧评论

评论关闭