700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > rvest | 网络爬虫初步——使用CSS选择器

rvest | 网络爬虫初步——使用CSS选择器

时间:2021-02-14 06:37:49

相关推荐

rvest | 网络爬虫初步——使用CSS选择器

网络爬虫就是从网页上批量提取相应的信息,主要原理就是利用一定的 规则进行信息定位。tidyverse系列工具包中的rvest工具包可以快捷实现这一功能。下面代码就是使用rvest中的相关函数进行爬虫的一个简单的例子:

library(rvest)library(tidyverse)#豆瓣新片榜网址html<-read_html("/chart")#爬取电影名称html%>%html_nodes("div.pl2a")%>%html_text()%>%str_remove_all("\\n")%>%str_remove_all("")->moviename#爬取每个电影的简略信息html%>%html_nodes("div.pl2p.pl")%>%html_text()->movieinfo#爬取每个电影的链接html%>%html_nodes("div.pl2a")%>%html_attr("href")->moviehtml#合并并整理bind_cols(moviename,movieinfo,moviehtml)%>%data.frame()%>%set_names(c("电影名","电影信息","链接"))%>%as_tibble()

原网页界面:

爬虫结果:

以上例子使用rvest中的函数有4个:read_html()html_nodes()html_text()html_attr(),其中最关键的是html_nodes()函数。

1 read_html()

read_html()的功能是读取网页内容,输入参数为网页地址,输出结果为一个list。

网页既可以是在线网页,也可以是储存到本地的离线html文件。

2 html_nodes()

html_nodes()的功能是通过一定的规则来定位想要爬取的信息,语法结构如下:

html_nodes(x,css,xpath)

x为read_html()的输出结果;

css和xpath为定位信息的两种方法,可以任选其一。

本篇主要介绍使用csss选择器进行信息定位,它主要使用网页标签规则进行信息定位。

2.1 网页标签规则

在网页任意位置点击鼠标右键,然后点击“检查”选项(或者“审查元素”)就可以打开它的源代码,网页显示的内容就是由这些源码的结构和内容控制的,以“豆瓣新片榜”为例,如下图所示:

网页源码具有以下几个特点:

每个标签的内容都是以<标签名 属性>开始,以</标签名>结束,其中属性可以缺省,见下图;

标签内部还可以嵌套标签,具有嵌套结构的标签开头有个明显的实心三角形作为提醒;

网页上显示的内容就存储在这些标签内。

2.2 CSS选择器

CSS选择器的语法规则见附表1。下面列举几个常见用法:

属性class和id分别简写为.和#,其他属性省略

比如要定位如下图所示的标签位置,CSS的值为div.pl2;如果class换成id,则CSS值为div#pl2

前后标签具有嵌套结构,用空格隔开

比如下图需要定位的内容,位于div标签下的a标签中,CSS的值为div.pl2 a

如果要进一步定位到图中span标签内,则CSS值为div.pl2 a span,span中的属性style省略。

同时选中同级的多个标签下的内容,中间用逗号隔开

比如下图中要定位的a标签和p标签是div标签下的同级标签,CSS的值为div.pl2 a,p.pl

选择多个同级同名标签的某一个,可以使用nth-child(n)语法

比如下图中的div标签内有多个同级p标签,要定位的内容位于其中一个p标签内,该p标签是div标签第5个子标签,CSS值为div#introduction-to-html-elements p:nth-child(5)。其中#后面跟的是div标签的id属性值,而class属性值带有空格,为避免歧义将其省略。

nth-child(n)表示从前往后数第n个子标签;

nth-last-child(n)表示从后往前数第n个子标签。

其他规则可参见附表1

2.3 html_node()

html_nodes()会返回所有符合规则的记录。而html_node()html_nodes()的单数形式,只返回第一条记录。

3 html_text()

html_text()的输入参数是html_node()html_nodes()的输出结果,返回值是对应网页展现的内容。

4 html_attr()

html_attrs()的输入参数同样是html_node()html_nodes()的输出结果,返回值是标签的所有属性值。

html_attr()是其单数形式,用于返回特定的属性值,返回的属性由第二个参数name控制。

一些超链接的地址不会呈现在网页上,可以通过此函数进行爬取

比如下图中,a标签的href属性是每个电影在豆瓣上的主页的网址。爬取代码如下:

html%>%html_nodes("div.pl2a")%>%html_attr("href")

附表1

表格来源:/cssref/css_selectors.ASP

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。