【问题标题】:R: Getting columns with rvestR:使用 rvest 获取列
【发布时间】:2020-01-01 06:20:11
【问题描述】:

我可以使用 rvest 获取我想要的列。然后,我想将所有列组合成一个数据框,这样我就可以得到一个包含公司名称、部门、地址、网址和电话的公司列表。

#这是我的代码:

url_base <- "https://www.yellowpages.my/listing/results.php?keyword=&where=selangor&screen=%d"
library(rvest)
library(purrr)
library(dplyr)

#抓取前两页:

map_df(1:2, function(i) {
  cat(".")
  pg <- read_html(sprintf(url_base, i))
  data.frame(
    name=html_text(html_nodes(pg, "div.cbp-vm-company >a")),
    sector=html_text(html_nodes(pg, "div.cbp-vm-address > a")),
    address=html_text(html_nodes(pg, "div.cbp-vm-address")),
    url=html_attr(html_nodes(pg, ".cbp-vm-company  > a"),'href'),
    phone=html_attr(html_nodes(pg, ".cbp-vm-cta > span"),'data-content'),
    stringsAsFactors=FALSE)
}) -> List

但是,有些问题我无法解决。你能帮忙吗?

  1. 电话:我可以知道如何从数据框中排除“NA”吗?

  2. url:还有其他页面没有此特定列的信息(例如“https://www.yellowpages.my/listing/results.php?keyword=&where=selangor&screen=10946”)。我可以为这个特定的列加上 NA 吗?这样我就可以将它与其他列结合起来

  3. name:某些页面(例如“https://www.yellowpages.my/listing/results.php?keyword=&where=selangor&screen=10946”)必须使用“html_nodes("div.cbp-vm -companytext")" 提取公司名称而不是 "html_nodes("div.cbp-vm-company >a")"。我该如何处理这个问题?

【问题讨论】:

    标签: r rvest


    【解决方案1】:

    对于您的第三个问题,您可以使用 css 或语法来匹配任一

    html_nodes("div.cbp-vm-company >a,div.cbp-vm-companytext") 
    

    【讨论】:

      【解决方案2】:

      对于您的第一个问题,您可以将属性的路径更改为phone=html_attr(html_nodes(pg, ".left-border+ .left-border"),'data-content')

      这只会选择之前包含信息元素的电话元素。我建议使用SelectorGadget 之类的工具,它允许您以交互方式选择所需的元素。这可能有助于回答您的其他问题。剩下的我会稍后再试。

      【讨论】:

      • 谢谢@rjpat。仍然无法解决 #2 - url/sector 的问题,因为我无法将所有列合并到一个列表中,因为 url/sector 中缺少数据。已尝试使用 ifelse 语句但不起作用。扇区=ifelse(html_text(html_nodes(pg, "div.cbp-vm-address > a"))=="","NA",html_text(html_nodes(pg, "div.cbp-vm-address > a") ))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多