【发布时间】:2021-07-03 20:58:15
【问题描述】:
我正在使用 R 编程语言进行 NLP(自然语言处理)分析 - 为此,我需要“网络抓取”互联网上的公开信息。
最近,我学会了如何从我正在使用的网站“网络抓取”单个 pdf 文件:
library(pdftools)
library(tidytext)
library(textrank)
library(dplyr)
library(tibble)
#this is an example of a single pdf
url <- "https://www.canlii.org/en/ns/nswcat/doc/2013/2013canlii47876/2013canlii47876.pdf"
article <- pdf_text(url)
article_sentences <- tibble(text = article) %>%
unnest_tokens(sentence, text, token = "sentences") %>%
mutate(sentence_id = row_number()) %>%
select(sentence_id, sentence)
article_words <- article_sentences %>%
unnest_tokens(word, sentence)
article_words <- article_words %>%
anti_join(stop_words, by = "word")
#this final command can take some time to run
article_summary <- textrank_sentences(data = article_sentences, terminology = article_words)
#Sources: https://stackoverflow.com/questions/66979242/r-error-in-textrank-sentencesdata-article-sentences-terminology-article-w , https://www.hvitfeldt.me/blog/tidy-text-summarization-using-textrank/
如果您想手动访问单个网站,然后“webscrape”这个网站,上面的代码可以正常工作。现在,我想尝试同时自动下载 10 篇这样的文章,而无需手动访问每个页面。例如,假设我想从这个网站下载前 10 个 pdf:https://www.canlii.org/en/#search/type=decision&text=dog%20toronto
我想我找到了以下网站,该网站讨论了如何做类似的事情(我为我的示例修改了代码):https://towardsdatascience.com/scraping-downloading-and-storing-pdfs-in-r-367a0a6d9199
library(tidyverse)
library(rvest)
library(stringr)
page <- read_html("https://www.canlii.org/en/#search/type=decision&text=dog%20toronto ")
raw_list <- page %>%
html_nodes("a") %>%
html_attr("href") %>%
str_subset("\\.pdf") %>%
str_c("https://www.canlii.org/en/#search/type=decision&text=dog", .)
map(read_html) %>%
map(html_node, "#raw-url") %>%
map(html_attr, "href") %>%
str_c("https://www.canlii.org/en/#search/type=decision&text=dog", .) %>%
walk2(., basename(.), download.file, mode = "wb")
但这会产生以下错误:
Error in .f(.x[[1L]], .y[[1L]], ...) : scheme not supported in URL 'NA'
谁能告诉我我做错了什么?是否可以下载本网站上出现的前 10 个 pdf 文件并将它们单独保存在 R 中,分别为“pdf1”、“pdf2”、...“pdf9”、“pdf10”?
谢谢
【问题讨论】:
-
如果我运行到最后一个
walk2命令,您的代码只返回NA。您不能将NA传递给download.file(),因为那不是有效的 URL。您尝试使用的页面通过 javascript 生成其所有数据。您不能将rvest用于需要 javascript 的页面。你需要使用类似Rseleniun -
感谢您的回复!我对 Rseleniun 知之甚少 - 我现在就开始阅读!
-
这个包可以做吗? github.com/salimk/Rcrawler
标签: r web-scraping text nlp tidyr