专栏首页生物信息云生信人的R语言视频教程-语法篇-第十一章:R中的网络爬虫

生信人的R语言视频教程-语法篇-第十一章:R中的网络爬虫

这一章的内容是: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(MedBioInfoCloud),作者:DoubleHelix

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 48个实用的生信在线工具强烈推荐,不看是你的损失!

    在线工具一般具有“功能强大、操作简单、无需安装、用完就走”的特点,轻松实现“用别人的服务器分析自己的数据”。

    DoubleHelix
  • R语言基础教程——第9章:字符串操作

    R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr、strsplit、paste、regexpr这几个了。...

    DoubleHelix
  • 基因芯片数据分析(四):获取差异表达基因

    然而对于大多数生物学工作者而言,学习和使用一种或者多种统计分析手段并不一定非常容易,这需要付出时间和努力。Bioconductor的很多软件包很好的避免了人们为...

    DoubleHelix
  • react native使用WebView加载本地html部署方案

    十里桃花舞丶
  • 为了不复制粘贴,我被逼着学会了JAVA爬虫

    受疫情影响一直在家远程办公,公司业务进展的缓慢,老实讲活并没有那么多,每天吃饭、睡觉、逛技术社区、写博客,摸鱼摸得爽的很。早上本来还想在来个回笼觉,突然部门经理...

    程序员内点事
  • 为了不复制粘贴,我被逼着学会了JAVA爬虫

    受疫情影响一直在家远程办公,公司业务进展的缓慢,老实讲活并没有那么多,每天吃饭、睡觉、逛技术社区、写博客,摸鱼摸得爽的很。早上本来还想在来个回笼觉,突然部门经理...

    程序员内点事
  • 深入剖析iframe跨域问题

    HTML5学堂:本文当中我们介绍了跨域的基本知识,讲解到了跨域的相关种类,并讲解了解决跨域中的一种方法——如何使用iframe跨域。讲解了iframe跨域的基本...

    HTML5学堂
  • 前端跨域知识简介

    前端跨域知识简介 灵感 差不多2年前,由于业务需要,了解各种各样不同的跨域方式。但由于各种方式千奇百怪,我觉得有必要将各种方法封装起来,方便使用,弄了个简单的跨...

    李成熙heyli
  • Python爬虫入门教程 19-100 51CTO学院IT技术课程抓取

    从今天开始的几篇文章,我将就国内目前比较主流的一些在线学习平台数据进行抓取,如果时间充足的情况下,会对他们进行一些简单的分析,好了,平台大概有51CTO学院,C...

    梦想橡皮擦
  • Ajax请求SpringMVC Json数据报错Http 400(一)

        最近在完善博客的过程中,发现了一些细节问题。后台使用的是SpringMvc,前台使用的是jquery请求。之前后台采用的是

    幽鸿

扫码关注云+社区

领取腾讯云代金券