R语言爬虫系列6|动态数据抓取范例
优采云 发布时间: 2020-08-15 12:32
作者:鲁伟,热爱数据,坚信数据技术和代码改变世界。R语言和Python的忠实拥趸,为成为一名未来的数据科学家而拼搏终身。个人公众号:数据科学家养成记 (微信ID:louwill12)
第一篇戳:
第二篇戳:
第三篇戳:
第四篇戳:
第五篇戳:
通过上面几期的推送,小编基本上早已将R语言爬虫所须要的基本知识介绍完了。R其实是以一门统计剖析工具出现在大多数人印象中的,但其虽然本质上是一门编程语言,对于爬虫的支持虽不如Python那样多快好省,但细心研究一下总能作出一些使你惊喜的疗效。
大约很早之前,小编就写过关于R语言爬虫新贵rvest的抓取介绍,之前说rvest+SelectGadgetor是结构化网页抓取的实战神器,大家的溢美之词不断。详情可见推文:
R语言爬虫神器:rvest包+SelectorGadget抓取链家上海二手房数据
但网路爬虫这个江湖很险恶,单靠一招rvest行走江湖必然凶多吉少,一不小心遇到哪些AJAX和动态网页凭仅把握rvest的诸位必将束手无策。本文小编就简单介绍下在用R语言进行实际的网路数据抓取时怎样将动态数据给弄到手。
所谓动态网页和异步加载,在之前的系列4的时侯小编已通过AJAX介绍过了,简单而言就是我明明在网页中听到了这个数据,但到后台HTML中却找不到了,这一般就是XHR在作怪。这时候我们就不要看原创的HTML数据了,需要进行二次恳求,通过web开发者工具找到真实恳求的url。下面小编就以两个网页为例,分别通过GET和POST恳求领到动态网页数据,全过程主要使用httr包来实现,httr包堪称是RCurl包的精简版,说其短小精悍也不为过。httr包与RCurl包在主要函数的区别如下所示:
GET恳求抓取陌陌好友列表数据
很早之前圈子里就听到过用Python抓取自己陌陌好友数据的案例分享,今天便以陌陌网页版为例,探一探其网页结构。首先登陆个人陌陌网页版,右键打开web开发者工具,下来一大堆恳求:
简单找一下发觉网页中的陌陌好友列表信息并没有呈现在HTML 中,大概可以推断陌陌好友数据是通过动态加载来显示的,所以直接定位到XHR中,经过几番尝试,结合两侧的preview,我们会发觉大量整齐划一的数据,所以二次恳求的url真的就是它了:
找到真正的url以后,接下来就是获取恳求信息了,切换到Headers版块,Header版块下的4个子信息我们都须要关注,它们是我们构造爬虫恳求头的关键。
从Header中我们可以看见该信息是通过GET方式恳求得到的,General信息下的Request URL,Request Method, Status Code; Response Headers信息下的Connection, Content-Type; Request Headers信息下的Accept, Cookie, Referer, User-Agent以及最后的Query String Parameters都是我们须要重点关注的。
找到相应的信息然后,我们便可以直接借助httr包在R中建立爬虫恳求:
<p>#传入微信cookie信息<br />Cookie Accept: application/json<br />-> Content-Type: text/plain<br />-> User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0<br />-> Referer: https://wx.qq.com/<br />-> Connection: keep-alive<br />-> cookie: 我的微信cookie<br />-> <br /> Connection: keep-alive<br />-> cookie: 网易云课堂cookie<br />-> Content-Length: 69<br />-> <br />>> {"pageIndex":1,"pageSize":50,"relativeOffset":0,"frontCategoryId":-1}<br /><br />