这一章的内容是:R中的网络爬虫
用任何语言做爬虫必须要了解的就是网页语法,网页语言无非就是HTML,XML,JSON等,因为正是通过这些我们才能在网页中提取数据,过多的就不再描述,大家可以自行参考大量的资料,大多数语法都是树形结构,所以只要理解了,找到需要数据的位置并不是很难。用R语言制作爬虫无非就是三个主要的包。XML,RCurl,rvest,这三个包都有不同的主要函数,是R语言最牛的网络爬虫包。
1.HTML
HTML框架简单说就是任何HTML网页文件中都会包含的基本代码内容。如果我们打算写一个页面,就一定要把框架代码写入后才能正式开始添加内容。框架代码如下:
<!DOCTYPE HTML><html> <head> </head> <body> </body> </html>
第一行 <!DOCTYPE HTML>
第二行 <html>
第三行 <head>
第四行 </head>
第五行 <body>
第六行 </body>
第七行 </html>
这七行代码是所有HTML页面所共有的,也就是HTML的框架了。不信我们来验证一下。https://www.w3school.com.cn/
比如:
图片来自网络
2.rvest包介绍
对于rvest的使用,主要掌握read_html、html_nodes、html_attr几个函数。其中read_html函数获取获取网页信息,html_nodes获取网页节点信息,html_attr函数获取特定节点的属性值。
rvest是R语言一个用来做网页数据抓取的包,包的介绍就是“更容易地收割(抓取)网页”。其中html_nodes()函数查找标签的功能非常好用。
相关的函数:
read_html():读取html文档;
html_nodes():获取指定名称的网页元素、节点;
html_text():获取指定名称的网页元素、节点文本;
html_attrs(): 提取所有属性名称及内容;
html_attr(): 提取指定属性名称及内容;
html_tag():提取标签名称;
html_table():解析网页数据表的数据到R的数据框中;
html_session():利用cookie实现模拟登陆;
guess_encoding():返回文档的详细编码;
repair_encoding():用来修复html文档读入后乱码的问题。
html_session()用来在浏览器中模拟会话
jump_to()用来接收一个url用来连接的跳转
follow_link()用来接收一个表达式(例如a标签)进行连接的跳转
back()用来模拟浏览器后退按钮
forward()用来模拟浏览器前进按钮
submit_form()用来提交表单
str_trim() 删除字符串2端的空格,转义字符也能删掉。
我们以http://www.chemfaces.com/ 进行介绍,爬取该网站所有天然产物的药物信息。http://www.chemfaces.com/natural/
2.1 read_html函数
read_html函数用于获取指定链接的网页信息,因此需要制定URL地址以及网页编码格式,默认为UTF-8即可。
stringAsFactors=FALSE
# install.packages("rvest")
# install.packages('RCurl')
url1 <- "http://www.chemfaces.com/natural/"
library(tidyr)
library(rvest)
library(dplyr)
drug_web <- read_html(url1, encoding = "utf-8")
2.2 html_nodes函数
html_nodes函数用于获取网页节点信息。在2.1中,通过read_html函数获取的变量chemfaces含有药物所有信息。若只想抓取网页内特定节点的信息,只需要利用html_nodes函数指定目标节点。先查看网页源代码,找到目标信息的位置及节点。html_nodes用于获取相应节点的数据,先看下html_nodes的参数:
html_nodes(x, css, xpath)
x:网页信息,即read_html获取的网页信息变量;
css:使用css选择参数,用于定位网页节点,语法为标准css选择器的语法,参见http://www.w3school.com.cn/cssref/css_selectors.asp 。
xpath:使用xpath选择参数,功能与css一致,用于定位网页节点,语法为xpath语法,参见http://www.w3school.com.cn/xpath/xpath_syntax.asp 。
css参数xpath参数功能一致,两者选择一种即可。
本文分享自 MedBioInfoCloud 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!