使用rvest html_nodes()为每个抓取的项存储li元素

siotufzp  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(207)

我正在尝试下载一些数据,例如,我可以使用以下内容:

"https://www.fotocasa.es/es/comprar/viviendas/barcelona-capital/sagrada-familia/l/19/" %>% 
  read_html() %>% 
  html_nodes(".re-CardFeatures-wrapper")

具有以下结构:

List of 2
 $ :List of 2
  ..$ node:<externalptr> 
  ..$ doc :<externalptr> 
  ..- attr(*, "class")= chr "xml_node"
 $ :List of 2
  ..$ node:<externalptr> 
  ..$ doc :<externalptr> 
  ..- attr(*, "class")= chr "xml_node"
 - attr(*, "class")= chr "xml_nodeset"

这对应于网站上的两个属性。
我想从列表中提取“li”项

"https://www.fotocasa.es/es/comprar/viviendas/barcelona-capital/sagrada-familia/l/19/" %>% 
  read_html() %>% 
  html_nodes(".re-CardFeatures-wrapper") %>% 
  html_nodes("li")

其中:

{xml_nodeset (10)}
 [1] <li class="re-CardFeatures-feature">2 habs.</li>\n
 [2] <li class="re-CardFeatures-feature">1 baño</li>\n
 [3] <li class="re-CardFeatures-feature">60 m²</li>\n
 [4] <li class="re-CardFeatures-feature">3ª Planta</li>\n
 [5] <li class="re-CardFeatures-feature">Balcón</li>
 [6] <li class="re-CardFeatures-feature">3 habs.</li>\n
 [7] <li class="re-CardFeatures-feature">1 baño</li>\n
 [8] <li class="re-CardFeatures-feature">75 m²</li>\n
 [9] <li class="re-CardFeatures-feature">5ª Planta</li>\n
[10] <li class="re-CardFeatures-feature">Ascensor</li>

然而,现在,它已经打破了我原来拥有的“2列表”结构(每个属性一个)。
我的问题是,如何提取这两个属性的html_nodes(),并将它们存储为与每个给定属性相对应?
即,列表应当在“3hab”之后“断开”,因为这是第二属性的第一项。

bjp0bcyl

bjp0bcyl1#

要得到“2列表”,我们可以使用lapply,如下所示:

library(dplyr)
library(rvest)
house = "https://www.fotocasa.es/es/comprar/viviendas/barcelona-capital/sagrada-familia/l/19/" %>% 
  read_html() %>% 
  html_nodes(".re-CardFeatures-wrapper") 

lis = lapply(house, function(x) x %>% html_nodes("li"))

现在我们有了lis,每个属性的信息存储在列表的不同元素中。

相关问题