尝试使用rvest从网页抓取表时变量为空

cngwdvgl  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(169)

我是一个全新的用r编写代码的人,我正在尝试将下面的表格整理成一个数据框架:
https://www.zyxware.com/articles/5363/list-of-fortune-500-companies-and-their-websites-2015
这应该是相当简单的,但我的变量有0个观察,我不知道我做错了什么。我使用的代码是:

library(tidyverse)
library(rvest)

#set the url of the website
url <- read_html("https://www.zyxware.com/articles/5363/list-of-fortune-500-companies-and-their-websites-2015")

#Scrape variables
rank <- url %>% html_nodes(".td:nth-child(1)") %>% html_text()
company <- url %>% html_nodes(".td:nth-child(2)") %>% html_text()
website <- url %>% html_nodes(".td~ td+ td") %>% html_text()

#Create dataframe
fortune500 <- data.frame(company,rank,website)

正试图遵循这个walkthrough。任何帮助都非常感谢:)

wwtsj6pe

wwtsj6pe1#

您可以通过在url上调用html_table()并拾取第一个元素来完成此操作。

library(tidyverse)
library(rvest)
url <- read_html("https://www.zyxware.com/articles/5363/list-of-fortune-500-companies-and-their-websites-2015")
url %>% html_table() %>% pluck(1)
#> # A tibble: 500 × 3
#>     Rank Company            Website                  
#>    <int> <chr>              <chr>                    
#>  1     1 Walmart            www.walmart.com          
#>  2     2 Exxon Mobil        www.exxonmobil.com       
#>  3     3 Chevron            www.chevron.com          
#>  4     4 Berkshire Hathaway www.berkshirehathaway.com
#>  5     5 Apple              www.apple.com            
#>  6     6 General Motors     www.gm.com               
#>  7     7 Phillips 66        www.phillips66.com       
#>  8     8 General Electric   www.ge.com               
#>  9     9 Ford Motor         www.ford.com             
#> 10    10 CVS Health         www.cvshealth.com        
#> # … with 490 more rows

创建于2023年3月1日,使用reprex v2.0.2
或者,你的原始代码也可以工作,你只需要删除td前面的句点。.标识一个对象类,所以你试图标识类td的对象。如果前面没有.,它将查找名为td的标签,这就是你想要的。

library(tidyverse)
library(rvest)
url <- read_html("https://www.zyxware.com/articles/5363/list-of-fortune-500-companies-and-their-websites-2015")
rank <- url %>% html_nodes("td:nth-child(1)") %>% html_text()
company <- url %>% html_nodes("td:nth-child(2)") %>% html_text()
website <- url %>% html_nodes("td~ td+ td") %>% html_text()
fortune500 <- data.frame(company,rank,website)
head(fortune500)
#>              company rank                   website
#> 1            Walmart    1           www.walmart.com
#> 2        Exxon Mobil    2        www.exxonmobil.com
#> 3            Chevron    3           www.chevron.com
#> 4 Berkshire Hathaway    4 www.berkshirehathaway.com
#> 5              Apple    5             www.apple.com
#> 6     General Motors    6                www.gm.com

创建于2023年3月1日,使用reprex v2.0.2

相关问题