使用R和选择器小工具进行网页抓取
我试图从使用R中提取数据。我使用rvest试图模拟。该示例提倡使用一个名为的工具来帮助轻松识别与要提取的数据关联的html_节点 我最终感兴趣的是构建具有以下模式/列的数据框架: 排名,博客名,facebook粉丝,twitter粉丝,alexa排名 下面是我的代码。我能够使用选择器小工具正确识别乐高示例中使用的html标记。然而,按照与Lego示例相同的过程和代码结构,我得到了NAs…使用强制[1]NA引入的firstNAs . 我的代码如下:使用R和选择器小工具进行网页抓取,r,web-scraping,html-parsing,rvest,R,Web Scraping,Html Parsing,Rvest,我试图从使用R中提取数据。我使用rvest试图模拟。该示例提倡使用一个名为的工具来帮助轻松识别与要提取的数据关联的html_节点 我最终感兴趣的是构建具有以下模式/列的数据框架: 排名,博客名,facebook粉丝,twitter粉丝,alexa排名 下面是我的代码。我能够使用选择器小工具正确识别乐高示例中使用的html标记。然而,按照与Lego示例相同的过程和代码结构,我得到了NAs…使用强制[1]NA引入的firstNAs . 我的代码如下: data2_html = read_html("
data2_html = read_html("http://blog.feedspot.com/video_game_news/")
data2_html %>%
html_node(".stats") %>%
html_text() %>%
as.numeric()
我还尝试了:html_nodehtml_node.stats、.stats span,它似乎适用于Facebook fans专栏,因为它报告了714场比赛,但是只返回1个数字
714 matches for .//*[@class and contains(concat(' ', normalize-space(@class), ' '), ' stats ')] | .//*[@class and contains(concat(' ', normalize-space(@class), ' '), ' stats ')]/descendant-or-self::*/span: using first{xml_node}
<td>
[1] <span>997,669</span>
这可能会帮助您:
library(rvest)
d1 <- read_html("http://blog.feedspot.com/video_game_news/")
stats <- d1 %>%
html_nodes(".stats") %>%
html_text()
blogname <- d1%>%
html_nodes(".tlink") %>%
html_text()
blogname返回易于管理的博客名称列表。另一方面,统计数据的信息则好坏参半。这是因为Facebook和Twitter粉丝的统计类彼此无法区分。在这种情况下,输出数组每三个数字就有一个信息,即stats=cfb,tw,alx,fb,tw,alx。。。。你应该把每个向量和这个向量分开
FBstats = stats[seq(1,length(stats),3)]
> head(stats[seq(1,length(stats),3)])
[1] "997,669" "4,070,476" "23,141,452" "38,019,811" "35,977" "603,681"
这可能会帮助您:
library(rvest)
d1 <- read_html("http://blog.feedspot.com/video_game_news/")
stats <- d1 %>%
html_nodes(".stats") %>%
html_text()
blogname <- d1%>%
html_nodes(".tlink") %>%
html_text()
blogname返回易于管理的博客名称列表。另一方面,统计数据的信息则好坏参半。这是因为Facebook和Twitter粉丝的统计类彼此无法区分。在这种情况下,输出数组每三个数字就有一个信息,即stats=cfb,tw,alx,fb,tw,alx。。。。你应该把每个向量和这个向量分开
FBstats = stats[seq(1,length(stats),3)]
> head(stats[seq(1,length(stats),3)])
[1] "997,669" "4,070,476" "23,141,452" "38,019,811" "35,977" "603,681"
这使用html_节点复数和str_替换来删除数字中的逗号。不确定这些数据是否都是你需要的
library(rvest)
library(stringr)
data2_html = read_html("http://blog.feedspot.com/video_game_news/")
data2_html %>%
html_nodes(".stats") %>%
html_text() %>%
str_replace_all(',', '') %>%
as.numeric()
这使用html_节点复数和str_替换来删除数字中的逗号。不确定这些数据是否都是你需要的
library(rvest)
library(stringr)
data2_html = read_html("http://blog.feedspot.com/video_game_news/")
data2_html %>%
html_nodes(".stats") %>%
html_text() %>%
str_replace_all(',', '') %>%
as.numeric()
您可以使用html_表以最少的工作量提取整个表:
图书馆服务
图书馆管理员
抓取html
h%读取\u html
游戏日志%
html_节点'表'>%选择封闭表节点
html_table%>%将表转换为data.frame
设置_namesmake.names%>%make names语法化
mutateBlog.Name=sub'\\s?\\+.*,Blog.Name%>%从名称信息中提取标题
在3:5时进行变异,解析\u number%>%使数字实际上是数字
用于打印的tbl_df
游戏博客
>一个tibble:119 x 5
>排名Blog.Name Facebook.Fans Twitter.Followers Alexa.Rank
>
>1 1 Kotaku-玩家指南997669 1209029 873
>2 IGN |电子游戏4070476 4493805 399
>3 3 Xbox线23141452 10210993 879
>4 4官方PlayStation博客38019811 12059607 500
>5 5任天堂生活35977 95044 17727
>6 6游戏告密者603681 1770812 10057
>7 Reddit游戏玩家1003705 430017 25
>8多边形623808 485827 1594
>9 9 Xbox Live的少校Nelson 65905 993481 23114
>10 10 VG247 397798 202084 3960
> ... 还有109行
值得检查的是,所有内容都按照您的要求进行了解析,但此时它应该是可用的。您可以使用html\u table以最少的工作量提取整个表:
图书馆服务
图书馆管理员
抓取html
h%读取\u html
游戏日志%
html_节点'表'>%选择封闭表节点
html_table%>%将表转换为data.frame
设置_namesmake.names%>%make names语法化
mutateBlog.Name=sub'\\s?\\+.*,Blog.Name%>%从名称信息中提取标题
在3:5时进行变异,解析\u number%>%使数字实际上是数字
用于打印的tbl_df
游戏博客
>一个tibble:119 x 5
>排名Blog.Name Facebook.Fans Twitter.Followers Alexa.Rank
>
>1 1 Kotaku-玩家指南997669 1209029 873
>2 IGN |电子游戏4070476 4493805 399
>3 3 Xbox线23141452 10210993 879
>4 4官方PlayStation博客38019811 12059607 500
>5 5任天堂生活35977 95044 17727
>6 6游戏告密者603681 1770812 10057
>7 Reddit游戏玩家1003705 430017 25
>8多边形623808 485827 1594
>9 9 Xbox Live的少校Nelson 65905 993481 23114
> 10 10
VG247 397798 202084 3960
> ... 还有109行
值得检查的是,所有内容都按照您的要求进行了解析,但此时它应该是可用的。这看起来很酷,但我无法复制您的结果。错误:game\u blogs%html\u node'table%%>%选择封闭表节点html\u table%%>%将表转换为数据。框架集\u namesmake.names错误:x`和nm必须相同长度`Ah!抱歉,这使用的是purrr::set_names的开发版本,可以使用函数。您可以从安装,也可以只使用set_namesmake.namesnames。这看起来很酷,但我无法复制你的结果。错误:game\u blogs%html\u node'table%%>%选择封闭表节点html\u table%%>%将表转换为数据。框架集\u namesmake.names错误:x`和nm必须相同长度`Ah!抱歉,这使用的是purrr::set_names的开发版本,可以使用函数。您可以从安装,也可以只使用set_namesmake.namesnames。这将做同样的事情。