在 R 中使用 url-list 进行网页抓取
Web scraping using a url-list in R
我正试图从我收集的多个网站上抓取一些 URL。我将已经收集的网站保存在一个名为 meetings2017_2018
的数据框中。问题是 URLs 除了 URLs 的第一部分:https://amsterdam.raadsinformatie.nl
看起来彼此不太相似。 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
我设法创建了一个非常简单的函数,可以从单个网站中提取 URLs(见下文)。
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。有人知道我该怎么做吗?
您可以 map/iterate 覆盖 meetings2017_2018
数据框中保存的 URL:
假设您的 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
})
我正试图从我收集的多个网站上抓取一些 URL。我将已经收集的网站保存在一个名为 meetings2017_2018
的数据框中。问题是 URLs 除了 URLs 的第一部分:https://amsterdam.raadsinformatie.nl
看起来彼此不太相似。 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
我设法创建了一个非常简单的函数,可以从单个网站中提取 URLs(见下文)。
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。有人知道我该怎么做吗?
您可以 map/iterate 覆盖 meetings2017_2018
数据框中保存的 URL:
假设您的 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
})