Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从R中的文档搜索web界面中刮取/自动下载PDF文件?_R_Web Scraping_Text_Nlp_Tidyr - Fatal编程技术网

如何从R中的文档搜索web界面中刮取/自动下载PDF文件?

如何从R中的文档搜索web界面中刮取/自动下载PDF文件?,r,web-scraping,text,nlp,tidyr,R,Web Scraping,Text,Nlp,Tidyr,我正在使用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/do

我正在使用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/
有人能告诉我我做错了什么吗?是否可以下载本网站上出现的前10个pdf文件,并将它们分别保存在R中,作为pdf1、pdf2、。。。pdf9,pdf10


谢谢

我看到一些人建议您使用硒,这是一种 模拟浏览器操作,以便web服务器将页面呈现为 如果有人在参观现场。根据我的经验,这几乎是不可能的 必须沿着那条路线走。网站的javascript部分是 与API交互,我们可以利用它绕过Javascript 直接分割并获取原始json数据。在Firefox和Chrome中,我在这一点上是相似的 假设您可以右键单击网站并选择“检查元素Q”, 转到“网络”选项卡并单击“重新加载”。您将看到每个请求 几秒钟或更短的时间后,浏览器对Web服务器的访问将被列出。 我们感兴趣的是那些具有“Type”json的。 右键单击条目时,可以选择“在新选项卡中打开”。其中一个 返回json的请求附加了以下URL 在Firefox中打开该URL会让您进入一个GUI,可以让您浏览 json数据结构,您将看到有一个“results”条目 包含搜索的前25个结果的数据。每一个都有一个 “路径”条目,指向将显示嵌入PDF的页面。 事实证明,如果将“.html”部分替换为“.pdf”,则该路径 直接指向PDF文件。下面的代码利用了所有这些信息

librarytidyverse用于管道和'purrr::map*`函数的tidyverse。 libraryhttr当“rvest”构建在您的计算机上时,它应该已经安装在您的计算机上 图书馆PDF工具 >使用poppler版本20.09.0 librarytidytext librarytextrank
base_url如果我一直运行到最后一个walk2命令,那么您的代码只返回NA。无法将NA传递给download.file,因为该URL无效。您尝试使用的页面通过javascript生成其所有数据。不能对需要javascript的页面使用rvest。您需要使用类似“谢谢您的回复”这样的词语!我对塞勒宁知之甚少——我现在就开始阅读!这个包裹可以吗?非常感谢你的回答!我现在刚刚启动了代码,等着看会发生什么,代码还在运行!似乎pdf_text_p1包含包含前25篇文章的文本。有没有办法将每篇文章中的文本分离成一个单独的R对象?例如,p1包含第一篇文章的所有文本,p2包含第二篇文章的所有文本?您可以使用list2env来实现这一点,但您必须首先使用类似名称PDF_text_p1的名称来命名列表。当然,循环可以实现这一点。或者也可以使用purrr::map来实现这一点。在将代码包装到一个函数(可能名为download_results_page)中之后,该函数将页面作为参数,您可以执行map1:20,download_results_page来获取页面1到20上所有PDF的文本。我想您是对的,我只是假设这是可以刮取的公共数据。也许在浏览网页之前与网站所有者联系会更好。我不认为这个问题需要删除,但是如果你想访问更多的网页,你应该先与他们联系。
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'