使用rvest从网页中提取名称列表和基础超链接

使用rvest从网页中提取名称列表和基础超链接,r,web-scraping,rvest,R,Web Scraping,Rvest,我对网页抓取还不熟悉,并试图掌握如何使用rvest从网页收集数据。感兴趣的网页是,它提供了一个社区组织列表,其中包含指向这些组织网站的超链接。我试图生成一个数据框,其中第一列是组织名称,第二列是超链接中的URL 我遵循了几个rvest教程和堆栈溢出问题,试图解析出适当的节点,以提取我感兴趣的信息,但毫无效果。期望的输出看起来是这样的(……/代码>只是截断输出表目标的期望开始和结束之间的中间输出): 我的代码尝试如下 库(xml2) 图书馆(rvest) 图书馆(tidyverse) URL%ht

我对网页抓取还不熟悉,并试图掌握如何使用
rvest
从网页收集数据。感兴趣的网页是,它提供了一个社区组织列表,其中包含指向这些组织网站的超链接。我试图生成一个数据框,其中第一列是组织名称,第二列是超链接中的URL

我遵循了几个
rvest
教程和堆栈溢出问题,试图解析出适当的节点,以提取我感兴趣的信息,但毫无效果。期望的输出看起来是这样的(<代码>……/代码>只是截断输出表目标的期望开始和结束之间的中间输出):

我的代码尝试如下

库(xml2)
图书馆(rvest)
图书馆(tidyverse)
URL%html_文本(trim=TRUE),
city=html\u节点(x,“ul>li”)%%>%html\u文本(trim=TRUE)
)
})  
#>#tible:0 x 0
由(v0.3.0)于2021年2月15日创建


非常感谢所有帮助。

首先,我认为您需要使用表达式来获得正确类型的链接。您对类外部链接的元素感兴趣,因此可以使用:

html_nodes(pg, xpath="//a[@class='external-link']")
html_nodes(pg, xpath="//a[@data-linktype='external' or 
 @class='external-link']") %>% 
map_df(function(x) {
data_frame(
  organization =  x %>% html_text(trim=TRUE),
  URL = x %>% html_attr("href")
)})  
您可以构建更复杂的xpath表达式,以满足需要。然后,您需要提取元素的文本和一个属性,您可以使用:

html_nodes(pg, xpath="//a[@class='external-link']")
html_nodes(pg, xpath="//a[@data-linktype='external' or 
 @class='external-link']") %>% 
map_df(function(x) {
data_frame(
  organization =  x %>% html_text(trim=TRUE),
  URL = x %>% html_attr("href")
)})  

这似乎很接近(谢谢!),但并没有产生列出的所有组织。似乎只有一些在
外部链接下
类,但其他的在
数据val=
下。是的,确实如此,您使用xpath搜索更复杂的模式:html_节点(pg,xpath=“//a[@data linktype='external'或@class='external-link'])。这就成功了!谢谢你,何塞!正如我在这里得到的语法(因为我不熟悉使用XPath),这是说:“对于所有包含@data linktype='external'或包含class='external-link'的标记,将文本传递给组织变量,将底层标记中的URL传递给URL变量”?我还不太清楚的是
html_nodes()
commandHi Abe中括号的功能,在xpath
//a
中将搜索所有
标记,括号
[…]
用于子集或筛选,
@
用于引用标记中的属性。xpath表达式:
//a[@data linktype='external'或@class='external-link']
将显示:“选择所有具有值为'external'的属性data linktype或值为'external link'的属性class的标记”