欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!
对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。
邮箱:huang.tian-yuan@qq.com
1.读取
1#假设url为网页
2library(rvest)
3read_html(rul)->website
4#该方法对于html/shtml都好用
5
6#可是网页为.aspx时候这个方法不行,改为
7library(httr)
8GET(url,handle=handle(url)) %>%
9 content(at="parse") ->website
2.进度条设置
在爬虫的时候经常爬到一个时候就自己断了,问题是我们还看不出来是断了还是没有断,
因此需要往里面加入进度条,当进度条卡住的时候,就可以停止自己的程序在断点重新跑
1 library(tcltk)
2u <- 1:2000
3
4#开启进度条
5
6pb <- tkProgressBar("进度","已完成 %", 0, 100)
7
8for(i in u) {
9 info<- sprintf("已完成 %d%%", round(i*100/length(u)))
10 setTkProgressBar(pb, i*100/length(u), sprintf("进度 (%s)", info),info)
11}
12#关闭进度条
13close(pb)
3.时间间隔设置
就算有进度条,程序隔一段时间还是会自动退出,有的网站设置了最长访问时间,有的会拒绝请求。为了打破这种机制,在循环中插入人工时滞,虽然时间会长一点,但是从自动化角度上看,其实还是节省了时间。时间的设置需要多试几次,直到最后跑很久都不会断掉为止。
1 System.time() #中间放进去的时间单位为秒
4.CSS vs Xpath
使用rvest包的时候,html_nodes函数可以使用CSS选择器和Xpath两种方式选择节点。
大部分情况下,CSS选择器方便快捷,实在是利器;但是在解决复杂性问题的时候(比如我需要找到包含符合一定规律的节点的父节点的父节点的最后一个节点的某个元素的时候),只能使用Xpath进行设置寻找。注意CSS和Xpath虽然可以混用,但是Xpath一定要在CSS之前使用,因为Xpath才能够得到一系列的节点及其相互关系,而CSS则直接给你一些节点,无法进一步进行更多的操作。
5.正则表达式
实在找不到什么好的关系的时候,不要忘了用正则表达式。stringr包的str_extract配合str_sub函数可以找到大部分问题。
6.断点继续的办法
用data.frame数据结构不断进行rbind,循环中的i,j,k注意要分开标,因为都是全局变量。一般来讲以i作为标准比较好,也要看解决问题的层次。重复使用上层循环得到的数据是会有重复的,没关系,我们有unique()。
往期精彩:
-
R语言ETL工程系列:排序(arrange)
-
手把手教你用R语言制作网络爬虫机器人(一)
-
R语言中文社区2018年终文章整理(作者篇)
-
R语言中文社区2018年终文章整理(类型篇)
公众号后台回复关键字即可学习
回复 爬虫 爬虫三大案例实战
回复 Python 1小时破冰入门
回复 数据挖掘 R语言入门及数据挖掘
回复 人工智能 三个月入门人工智能
回复 数据分析师 数据分析师成长之路
回复 机器学习 机器学习的商业应用
回复 数据科学 数据科学实战
回复 常用算法 常用数据挖掘算法
本周会有一篇R爬虫的入门的文章,敬请期待↓
网友评论