分享

用R语言三行代码写爬虫

 iceer1212 2020-05-16


每当程序员们感叹“人生苦短”的时候,都会想到Python——这段子已经如同“Hello World”一样成为圈子里的流行梗——不过最近,我对Python的感觉还是发生了变化。上周末我们一群奔三的研究僧在南京碰头,我发现大多数公共管理方向的学生学习Python的原始动力来自于网页爬虫——为论文找到更好的数据;但是显然,仅就这个目的而言,新学一门编程语言还是一件不太轻松的事,加上Python3.X与Python2.X命令在语法结构上略有差异,让我越来越感觉在公共管理的江湖上,Python网页爬虫的武林地位有可能被R语言取代。

这一期就来讲讲如何用R语言写网页爬虫,我用爬虫教程惯用的案例——下载和解析豆瓣电影TOP250的数据来做具体演示;对于其他的网页爬虫方法及工具,请参阅我的另一篇文章:抓取网页数据的六种工具,那篇文章里包含一段“百度新闻”的Python爬虫代码。

我在正式装13之前,需要先来解释三个概念:HTML、CSS和 JavaScript,这有助于理解后面的代码;我假设这篇文章的读者没有修过类似“大学计算机基础”这样的课程,如果有读者学习过这门课程,下面这一部分就可以直接跳过。

什么是“网页(源代码)”?纯文本

什么是“网页”?就是我们每天用浏览器打开的东西呗——不行,这个定义太感性了,我换一个更理性一点的问题——网页是怎么用代码写成的?要回答这个问题,我们不妨找来一个网页看看,就拿“京东商城”来说事儿吧,毕竟免费给老学长打广告我还是乐意的;下面是京东的主页及源代码(我用的是Microsoft Edge浏览器,网页右击“查看源”,下同;其他浏览器类似):


怎么样,双11疯狂剁手的时候有没有想过,你的每一次点击背后,是一行行这样的代码在执行?所以啊姑娘们,请珍惜你身边每一位真诚的程序猿吧……好了扯远了,说好不把个人情绪带入工作中的……来回答上面那个问题:什么是“网页”?“统计之都”(好吧是在为另一位老学长打广告了)给过一个我目前看过最为合适的定义:网页的源代码就是纯文本(吐槽:尽管听起来像是废话);网页源代码包含HTML,CSS 和JavaScript三种文本结构,即标记语言(HTML,只有语法,没有变量和逻辑)、层叠样式表(CSS,用于控制元素的展现形式)、脚本语言(JavaScript,操作HTML中元素的增删改);而我们要的数据就在HTML元素中,什么意思?下面就正式开始我的表演了:

抓什么?先看网页源代码

我们这一期的任务是抓取“豆瓣电影TOP250”上所有电影的“名称、得分、简评”3项内容——我们暂时称之为“字段”;首先我们得看看这3个字段在网页源代码中的位置:


显而易见,在“豆瓣”的源代码里,“名称、得分、简评”分别对应class='title'、class='rating_num'、class='inq'3个字段,这些就是我们需要爬取的数据——隐藏在HTML的元素中。

怎么抓?rvest包

这里抓取网页数据的基本思路是,抽取出以title、rating_num以及inq为标签的内容;这就用到了上面提到的CSS思想——通过层叠样式表的标签属性达到筛选的目的。下面开始网页爬取:

首先安装并加载rvest包                                

install.packages('rvest')

library('rvest')

然后定义爬取的网站,并从网站中读取HTML代码

url <- 'https://movie.douban.com/top250'

read_html(url) %>%html_nodes('.title') %>% html_text()

注意,上面的“%>%”是R语言中的管道函数,表示把左边的值输出为右边函数的第一个参数:


最后依次抓取另外两个字段:

read_html(url) %>% html_nodes('.rating_num') %>% html_text()

read_html(url) %>% html_nodes('.inq') %>% html_text()

从调用rvest包到爬取出结果,正好三行代码。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多