【问题标题】:Web scraping using a url-list in R在 R 中使用 url-list 进行网页抓取
【发布时间】:2019-03-18 13:03:07
【问题描述】:

我正在尝试从我收集的多个网站中抓取一些 URL。我将已经收集的网站保存在一个名为 meetings2017_2018 的数据框中。问题在于,除了 URL 的第一部分:https://amsterdam.raadsinformatie.nl 之外,URL 看起来并不十分相似。 url 的第二部分保存在数据框中。以下是一些示例:

/vergadering/458873/raadscommissie%20Algemene%20Zaken /vergadering/458888/raadscommissie%20Wonen /vergadering/458866/raadscommissie%20Jeugd%20en%20Cultuur /vergadering/346691/raadscommissie%20Algemene%20Zaken

所以整个 URL 将是 https://amsterdam.raadsinformatie.nl/vergadering/458873/raadscommissie%20Algemene%20Zaken

我设法创建了一个非常简单的函数,我可以从中提取单个网站的 URL(见下文)。

web_scrape <- function(meeting) {
      url <-  glue("https://amsterdam.raadsinformatie.nl{meeting}")
      read_html(url) %>%
      html_nodes("a") %>%
      html_attr("href")
      }

使用这个函数,我仍然需要从我想要抓取的数据框中插入每个 URL。由于数据框中有超过 140 个,这可能需要一段时间。如您所料,我想使用数据框中的 url-list 一次抓取所有 url。有人知道我该怎么做吗?

【问题讨论】:

  • 嗨!您可以映射/迭代您保存在 meetings2017_2018 数据框中的所有 URL。你知道怎么做吗?或者你想得到一些指导吗?
  • 和...我是否理解正确:我使用您的函数 web_scrape 收集了许多 URL。然后你想去每个这些 URL 并从中提取一些信息,对吗?
  • 是的,没错。我为函数正常工作后收集的 URL 编写了一个简单的过滤器代码,但我认为对于这个问题它不相关。我不确定如何映射/迭代。我尝试以这种方式使用地图功能map(meetings2017_2018, web_scrape)

标签: r url screen-scraping


【解决方案1】:

您可以在 meetings2017_2018 数据框中映射/迭代您保存的 URL:

假设您的网址保存在您的 meetings2017_2018 数据框中的 url 列中,那么起点将是:

# create a vector of the URLs
urls <- pull(meetings2017_2018, url)

# map over the URLs and execute whatever code you want for every URL
map(urls, function(url) {
    your_code
})

【讨论】:

  • 我尝试了以下操作,但收到一条错误消息,提示 Error in open.connection(x, "rb") : HTTP error 400. urls &lt;- pull(meetings2017_2018, urls) map(urls, function(url) { url &lt;- glue("https://amsterdam.raadsinformatie.nl{url}") read_html(url) %&gt;% html_nodes("a") %&gt;% html_attr("href") })
  • 成功了。 URL 中有一些空格,这就是我收到错误消息的原因。谢谢你的帮助!我现在唯一要做的就是取消嵌套数据框
  • 我还有一个问题。我认为取消嵌套/取消列出输出很容易,但似乎我也被困在这里。输出是一个包含 145 个元素的大列表(对于每个被抓取的网站)。每个元素都有不同的行数(90-300 之间),但都有一列称为 X[[i]]。你知道我可以把它做成一个有两列的大数据框:(1)元素的数量和(2)行信息?
  • 您应该制作一个可重现的最小示例并发布一个新问题。
猜你喜欢
  • 2014-12-28
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
相关资源
最近更新 更多