R语言爬虫实战——网易云课堂数据分析课程板块数据爬取

R语言爬虫实战——网易云课堂数据分析课程板块数据爬取

R语言的爬虫生态虽然与Python相比要弱小很多,but,如果你真的想要用R干一些有趣的事情,那么R语言目前所具有的的网络爬取工具也能给你带来很多方便。

今天借着中秋节的兴致,用网易云课堂

全部课程>编程开发>人工智能与大数据>数据分析

模块的课程作为实战对象,来给大家演练一下如何使用R语言httr包实现异步加载和POST 表单提交以及cookies登入。

直接使用json或者其他格式的表单返回值,避免苦逼的的书写大量正则表达式以及让人眼花缭乱的 CSS表达式、Xath路径表达式。这应该是每一个爬虫练习者都应该谨记的事情。

没错,异步加载的网页大多通过返回json字符串的形式来获取数据,它的难点在于请求的提交以及表单体构建、json字符串处理和最烦人的null空值剔除与替换。

本文使用到的技术是哈德利.威科姆大神的又一新作——网络数据爬取利器:httr。

网易云课堂的网页使用POST请求提交的异步加载,在不久前我曾用Python演示过一次,今天换成R重塑一遍流程,你也可以参照这个代码自己照葫芦画瓢。

网易云课堂Excel课程爬虫思路

首先我们需要做的事情是确认它的网页构架:

打开F12键,定位到XHR,寻找以.josn结尾的请求文件。当你在它的右侧打开对应Preview菜单,可以看到它的json数据源并且,有大量很整齐的课程信息的时候,差不多就找对了。


第二步:获取请求信息:

定位到Headers,主要关注四大模块:


General里面的Request URL、Request Method、Status Code

Response Headers里面的Content-Type
Request Headers 里面的 Accept、Content-Type、Cookie、Referer、User-Agent
以及最后Request Paylond里面的所有参数表

General里面的urlpost方法即是即决定访问的资源对象和使用的技术手段。
Response Headers里面的Content-Type决定着你获得的数据以什么样的编码格式返回。
Request Headers 里面的 Accept、Content-Type、Cookie、Referer、User-Agent等是你客户端的浏览器信息,其中Cookie是你浏览器登录后缓存在本地的登录状态信息,使用Cookie登入可以避免爬虫程序被频繁拒绝。(虽然网易云课堂的课程信息没有强制要求登录才能查看)。
Request Paylond信息最为关键,是POST提交请求必备的定位信息,因为浏览器的课程页有很多页信息,但是实际上他们访问同一个地址(就是General里面的url),而真正起到切换页面的就是这个Request Paylond里面的表单信息。

以下是我从Chrome后台获取的所有信息:

请求方式:POST

请求头:

请求头参数:(JSON)

前五页和最后一页的Request Paylond信息(可以看到其中前四个参数最为关键,剩余的可以不要)

第四步:构造请求提交信息:

构造浏览器报头信息:

构造url:

第五步:单步执行:



从返回信息上我们可以看到提交成功,毕竟已经成功返回有效内容。


可以看到我们想要的内容存放在r %>% content()返回值的第三个list(result)内的第二个list中,长度为50,宽度为27,刚好就是我们在后台看到的课程信息。如果你不记得`[[`(3)的用法,记得看前几篇的推送,它与extract函数相同,用于提取指定list对象。

如何使用管道操作符优雅的书写R语言代码

这是所有课程信息字段名称,我们无需要这么多,仅挑选其中必要到的即可。

第六步:书写完整的循环获取全部课程数据:

以上获取的是个巨大的列表,我们需要将其转换为数据框,并提取出我们需要的列。

还有一个问题,因为mydata整体是数据框,但是单个变量仍然是lsit(原因是原始信息中出现大量的NULL值),我们需要将所有NULL替换为NA,方可对mydata的个列进行向量化。

替换NULL值

将所有list列转为向量:

去重:

保存:

预览:


其实多了解一些方法,在很多时候避免走弯路,CSS表达式和Xpath路径表达式甚至正则表达式的门槛都很高,单是搞明白一种就已经很不容易,融会贯通就更难了。

但是多了解一些捷径和方法,你完全可以规避掉这些,我们的目标是获取数据,没有人关心你用的什么方法,学会灵活运用才是关键。


往期案例数据请移步本人GitHub:

github.com/ljtyduyu/Dat

在线课程请点击文末原文链接:

Hellobi Live | 9月12日 R语言可视化在商务场景中的应用

深圳SEO优化公司九江外贸网站制作公司楚雄网站优化按天扣费公司辽阳高端网站设计哪家好防城港建设网站报价乐山网络广告推广推荐贵港网站seo优化报价襄阳百度关键词包年推广推荐娄底seo推荐湖州网站开发宜宾网站开发公司丹东SEO按天扣费哪家好安康品牌网站设计哪家好辽阳网站推广方案哪家好徐州网站制作公司百色网页设计价格十堰SEO按天收费报价韶关网络营销哪家好平湖seo网站推广价格西宁网站搜索优化报价沧州百度网站优化多少钱铁岭建站推荐吉林网络广告推广哪家好宝安网站建设设计哪家好孝感网站关键词优化公司广元英文网站建设报价保山seo排名多少钱盘锦网络营销价格临沂阿里店铺运营淮南设计网站推荐遂宁网站改版公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化