最简单爬虫rvest_告别复制粘贴

640?wx_fmt=png

作者:李誉辉  

四川大学在读研究生


简介:
rvest是Hadley大神开发的包,使用非常简单,不需要懂得太多的HTML和CSS知识,
当然对于反爬虫的web,基本上就力不从心了,这种情况还是使用Python吧,毕竟术业有专攻。
首先安装 SelectorGadget

https://chrome.google.com/webstore/detail/selectorgadget/mhjhnkcfbdhnjickkkdbjoemdmbfginb,这个插件很方便,可以获得网页中某些部分的相关tags。
如果不懂HTML和CSS,最好安装,如果懂,还是用Python吧。


常用函数:

  • read_html(), 读取html文档或链接,可以是url链接,也可以是本地的html文件,
    甚至是包含html的字符串。

  • html_nodes(), 选择提取文档中指定元素的部分。
    支持
    css路径选择, 或xpath路径选择。
    如果tags层数较多,必须使用selectorGadget复制准确的路径。
    使用方式:开启SelectorGadget,然后鼠标选中位置,右击选择检查元素,光标移动到tags上。
    然后选择copy,选择selector或xpath 选项。

  • html_text(),提取tags内文本,

  • html_table(), 提前tags内表格。

  • html_form()set_values(), 和submit_form()分别表示提取、修改和提交表单。


1.文本提取

我们以 boss直聘

https://www.zhipin.com/?ka=header-home-logo网站为例进行演示。 首先在搜索框内输入“数据分析”进行搜索,范围选择全国, 可以打开如下页面:


640?wx_fmt=png


然后我们单击Selector Gadget插件按钮以开启该功能,再次点击可关闭。
单击后,鼠标指针悬浮于web上任意的tags元素,都会出现黄色的高亮框。如下图所示:


640?wx_fmt=gif


选中需要的元素后,右击,然后“检查”就能打开源代码并定位到该元素,如下图:


640?wx_fmt=png


通过浏览器,发现左侧的岗位tags为.info-primary .name,公司名称为.info-company .name
其中的句点.表示类对象,多级类对象用空格隔开。


640?wx_fmt=gif


然后用read_html()打开该web。


 1library(rvest)
2library(magrittr)
3
4# 打开网页
5site_1 <- "https://www.zhipin.com/job_detail/?query=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&scity=100010000&industry=&position="
6web_1 <- read_html(x = site_1)  
7
8tag_job <- ".info-primary .name .job-title" # 岗位名字
9tag_rev <- ".info-primary .name .red"  # 薪水
10tag_com <- ".info-company .company-text .name" # 公司名字
11
12# 开始抓取
13job_1 <- html_nodes(x = web_1, css = tag_job)
14rev_1 <- html_nodes(x = web_1, css = tag_rev)
15com_1 <- html_nodes(x = web_1, css = tag_com)
16
17# 从tags中提取文本内容
18job_1 %<>% html_text()
19rev_1 %<>% html_text()
20com_1 %<>% html_text()
21
22# 合并向量为数据框
23job_com <- data.frame(job = job_1,
24                      revenue = rev_1,
25                      company = com_1,
26                      stringsAsFactors = FALSE)
27head(job_com)
28rm(site_1, web_1, job_1, com_1)


640?wx_fmt=png


提取web中的文本,就采用这种方法,很多时候,文本内容复制,
无法直接用
html_text()将文本提取出来,
这时候就需要用正则表达式和
stringr包。


2.多重页面

很多时候,一个web项目中,有多重页面,即下一页。

这就需要找到每一页的url规律,找到规律后,增加循环就能搞定了。
这里我们发现第2页开始,url就出现变化了,从第2页到最后一页(最后1页还没找到), 每一页都只改变url末尾的page=n。事实上,大多数网页都有这个page=n。


640?wx_fmt=png

640?wx_fmt=png


通过不断点击下一页,发现最后一页是第10页,


640?wx_fmt=png

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值