Python的定向爬取实例

原创 2017年11月15日 03:15:38

定向爬取就是根据设置的主题进行内容的筛选,这里用一个例程简单记录

假如要对腾讯视频的某部电视剧的评论内容进行爬取,首先腾讯视频的评论是在当前页面进行加载,不会显示下一页,所以就需要用Fiddler进行抓包,找到请求新评论的网址。

首先点击加载更多


同时查看Fiddler里会有一个请求评论的网址



多点击几次,拿到两个这样的网址,然后分析这两个网址的相同与不同之处



然后打开这个网址

https://coral.qq.com/article/2215352252/comment?commentid=6336279930049572930&reqnum=20,会看到一些字典形式的信息

{"id":"6336246885607177351","rootid":"0","targetid":2215352253,"parent":"0","timeDifference":"\u4eca\u5929 01:02:59","time":1510678979,"content":"\u80e1\u6b4c\u5440\u80e1\u6b4c\uff0c\u50cf\u4f60\u548c\u6211\u8fd9\u4e48\u5e05\u7684\u4eba\uff0c\u90fd\u6ca1\u7ed3\u5a5a\u5440\uff01","title":"","up":"1","rep":"0","type":"1","hotscale":"0","checktype":"1","checkstatus":"0","isdeleted":"0","tagself":"","taghost":"","source":"9","location":"","address":"","rank":"-1","custom":"usertype=0","extend":{"at":0,"ut":0,"ct":"","wt":0},"orireplynum":"0","richtype":0,"userid":"179669897","poke":0,"abstract":"","thirdid":"pubsource=mobileupdate&msgid=478047797872&userid=119316627&cfrom=0&scene=1&datakey=cid%3Di5w51tl7vbl5mid%26vid%3Dd0025yxy8ii%26type%3D2&seq=21397864-b975-46ac-8ac2-32c64896c8b2&ctrid=0","ispick":0,"ishide":0,"isauthor":0,"replyuser":"","replyuserid":0,"replyhwvip":0,"replyhwlevel":0,"replyhwannual":0,"userinfo":{"userid":"179669897","uidex":"ec49c7a5ca2323df8deec2a2803e762e90","nick":"My. past","head":"http:\/\/q4.qlogo.cn\/g?

这就是评论信息,里面有一些被Unicode编码的字段,

"content":"\u80e1\u6b4c\u5440\u80e1\u6b4c\uff0c\u50cf\u4f60\u548c\u6211\u8fd9\u4e48\u5e05\u7684\u4eba\uff0c\u90fd\u6ca1\u7ed3\u5a5a\u5440\uff01"

"replyuser":""

"nick":"My. past"

"content"-----》胡歌呀胡歌,像你和我这么帅的人,都没结婚呀!

"nick":-----》"My. past"

"replyuser":""


所以,

"content"-----》这个字段是评论内容

"nick":-----》评论用户名,用户名本来就是英文,所以不用编码

"replyuser":""评论回复,这个评论没有回复所以为空


拿到这些信息之后就可以进行Python爬虫的编写了,代码如下,对作者代码进行了部分修改

#优化后的代码,增加自动加载新评论
vid='2215352573'#视频编号
comid='6335962088657810543'#设置评论起始编号
url='https://coral.qq.com/article/'+vid+'/comment?commentid='+comid+'&reqnum=20'#构造出真实的评论请求网址
#设置头信息伪装成浏览器爬取
h={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
   'Accept-Encoding':'gb2312,utf-8',
   'Accept-Language':'zh-CN,zh;q=0.8',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
   'Connection':'keep-alive',
   'referer':'https://v.qq.com'}
#设置cookie
cjar=http.cookiejar.CookieJar()
op=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))#设置对象
h1=[]
for key,value in h.items():#循环提取字典键值对并以元组形式赋予一个列表
    item=(key,value)
    h1.append(item)
op.addheaders=h1
urllib.request.install_opener(op)#安装为全局

def con(vid,comid):
    url='https://coral.qq.com/article/'+vid+'/comment?commentid='+comid+'&reqnum=20'
    data=urllib.request.urlopen(url).read().decode('utf-8')
    return data#构建爬取数据的函数

#分别构建筛选id、用户名、评论内容的正则表达式
idpat='"id":"(.*?)"'
userpat='"nick":"(.*?)"'
conpat='"content":"(.*?)"'
for i in range(0,10):
    print('--------------------------------------')
    print('第'+str(i)+'页评论内容')
    data=con(vid,comid)
    for j in range(0,20):
         #输出对应的信息
        try:
            #根据正则表达式匹配内容
            idlist=re.compile(idpat,re.S).findall(data)
            userlist=re.compile(userpat,re.S).findall(data)
            conlist=re.compile(conpat,re.S).findall(data)
            print('用户名是:'+eval('u"'+userlist[j]+'"'))
            print('评论内容是:'+eval('u"'+conlist[j]+'"'))
            print('\n')
        except Exception as e:#这里有一段Unicode编码在编译时会报错不知为何,所以加了一段异常处理
            print('excepyion:'+str(e))
    comid=idlist[19]

这里的的评论用户名,有些用户名在进行编码是出现报错,分析后发现是编码问题,把不对的编码删掉就可以正常编译了


所以我在程序里增加了异常处理,避免因为编码问题影响进程,每20条评论大约有1条这种编码,也可能一条也没有


爬了知乎 200 万数据,图说程序员都喜欢去哪儿工作

点击上方“CSDN”,选择“置顶公众号” 关键时刻,第一时间送达! 因为最近和朋友吃饭,大家都到了大三季,都在纠结自己该以哪里作为自己职业发展的起点?也想看看自己的背景,能不能找到靠谱的师...

Scrapy爬取电商网站京东奶粉商品价格数据-附各种问题解决

主要的目标是爬奶粉的价格,商品名称和sku_id,想知道奶粉的平均价格。 首先在cmd里建立一个新的scrapy spider project (1)scrapy startproject milkp...

中国大学排名定向爬取实例

一、功能描述         功能:中国大学排名定向排名爬取。         展示:以简单表格的形式输出大学排名结果,包括排名、大学名称、地点、总得分。         定向URL:http://w...

Python爬虫爬取豆瓣电影实例

  • 2017年03月27日 20:47
  • 5KB
  • 下载

[笔记]python网络爬虫:一个简单的定向爬取大学排名信息示例

爬取的网站信息网站地址 中国大学排行榜:http://www.eol.cn/html/ky/16phb/ 爬取内容 爬取该网站的综合排行榜单: 网页对应的源代码 ...

[python爬虫] Selenium定向爬取PubMed生物医学摘要信息

本文主要是自己的在线代码笔记,在生物医学本体Ontology构建过程中,我使用Selenium定向爬取生物医学PubMed数据库的内容。PubMed是一个免费的搜寻引擎,提供生物医学方面的论文搜寻以及...

[python爬虫] Selenium定向爬取虎扑篮球海量精美图片

作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队、CBA明星、花边新闻、球鞋美女等等,如果一张张右键另存为的话真是手都点疼了。作为程序员还是写个...

python2.7爬虫实例详细介绍之爬取大众点评的数据

本文主要介绍如何利用python进行网站数据的抓取工作,通过爬取大众点评-北京的火锅这个条目下的部分数据,来详细说明如何利用Python写好一个爬虫,获得你想要的数据。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python的定向爬取实例
举报原因:
原因补充:

(最多只允许输入30个字)