使用xml2和pagedown与R从HTML打印PDF时,请删除href和/或停用锚定链接
我正在使用R从一个食品博客中提取100篇文章,并将其转换为PDF格式。我已经完成了99%,但是当我打印最终的PDF时,在线超链接的URL就写在了文本中。我不希望每个链接都呈现为PDF中的文本,我相信在使用pagedown打印之前,我需要从HTML中删除href属性。有人知道怎么做吗?下面的示例代码应该可以让您进入我的pdf创建循环,阅读第一篇文章。初始部分将所有URL拉入一个向量。需要增强的部分,谢谢使用xml2和pagedown与R从HTML打印PDF时,请删除href和/或停用锚定链接,html,r,xml,pagedown,Html,R,Xml,Pagedown,我正在使用R从一个食品博客中提取100篇文章,并将其转换为PDF格式。我已经完成了99%,但是当我打印最终的PDF时,在线超链接的URL就写在了文本中。我不希望每个链接都呈现为PDF中的文本,我相信在使用pagedown打印之前,我需要从HTML中删除href属性。有人知道怎么做吗?下面的示例代码应该可以让您进入我的pdf创建循环,阅读第一篇文章。初始部分将所有URL拉入一个向量。需要增强的部分,谢谢 library(rvest) library(dplyr) library(tidyr) li
library(rvest)
library(dplyr)
library(tidyr)
library(stringr)
library(purrr)
library(downloader)
library(pagedown)
library(xml2)
library(htmltools)
#Specifying the url for desired website to be scraped
url1 <- paste0('https://www.foodrepublic.com/author/george-embiricos/page/', '1', '/')
#Reading the HTML code from the website
webpage1 <- read_html(url1)
# Pull the links for all articles on George's initial author page
dat <- html_attr(html_nodes(webpage1, 'a'), "href") %>%
as_tibble() %>%
filter(str_detect(value, "([0-9]{4})")) %>%
unique() %>%
rename(link=value)
dat <- head(dat, 10)
# Pull the links for all articles on George's 2nd-89th author page
for (i in 2:89) {
url <- paste0('https://www.foodrepublic.com/author/george-embiricos/page/', i, '/')
#Reading the HTML code from the website
webpage <- read_html(url)
links <- html_attr(html_nodes(webpage, 'a'), "href") %>%
as_tibble() %>%
filter(str_detect(value, "([0-9]{4})")) %>%
unique() %>%
rename(link=value)
dat <- bind_rows(dat, links) %>%
unique()
}
dat <- dat %>%
arrange(link)
dat <- tail(dat, 890)
articleUrls <- dat$link[1]
# Mac
# Windows
setwd("YOUR-WD")
# articleUrls <- articleUrls[1]
for(i in seq_along(articleUrls)) {
filename <- str_extract(articleUrls[i], "[^/]+(?=/$|$)")
a <- read_html(articleUrls[i])
xml_remove(a %>% xml_find_all("aside"))
xml_remove(a %>% xml_find_all("footer"))
xml_remove(a %>% xml_find_all(xpath = "//*[contains(@class, 'article-related mb20')]"))
xml_remove(a %>% xml_find_all(xpath = "//*[contains(@class, 'tags')]"))
#xml_remove(a %>% xml_find_all("head") %>% xml2::xml_find_all("script"))
xml_remove(a %>% xml2::xml_find_all("//script"))
xml_remove(a %>% xml_find_all("//*[contains(@class, 'ad box')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, 'newsletter-signup')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, 'article-footer')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, 'article-footer-sidebar')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, 'site-footer')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, 'sticky-newsletter')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, 'site-header')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, '.fb_iframe_widget')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, '_8f1i')]"))
xml_remove(a %>% xml_find_all("//*[contains(@class, 'newsletter-toggle')]"))
# xml_remove(a %>% xml_find_all("//*[contains(@class, 'articleBody')]"))
# xml_remove(a %>% xml_find_all("//href='([^\"]*)'"))
xml2::write_html(a, file = paste0("html/", filename, ".html"))
tryCatch(pagedown::chrome_print(input = paste0("html/", filename, ".html"),
output=paste0("pdf/", filename, ".pdf"),
format="pdf", timeout = 300, verbose=0,
wait=20), error=function(e) paste("wrong"))
}
库(rvest)
图书馆(dplyr)
图书馆(tidyr)
图书馆(stringr)
图书馆(purrr)
库(下载程序)
图书馆(向下翻页)
库(xml2)
图书馆(htmltools)
#指定要删除的所需网站的url
url1%
重命名(链接=值)
dat%
唯一的()
}
dat%
安排(链接)
dat%xml\u find\u all(“头”)%%>%xml2::xml\u find\u all(“脚本”))
xml\u remove(一个%>%xml2::xml\u find\u all(“//脚本”))
xml\u remove(一个%>%xml\u find\u all(“//*[contains(@class,'ad box')])”)
xml\u remove(一个%>%xml\u find\u all(“//*[contains(@class,'newsletter signup')]))
xml\u remove(一个%>%xml\u find\u all(“/*[contains(@class,'article footer')])”)
xml\u remove(一个%>%xml\u find\u all(“//*[contains(@class,'article footer sidebar')]))
xml\u remove(一个%>%xml\u find\u all(“/*[contains(@class,'site footer')])”)
xml\u remove(一个%>%xml\u find\u all(“//*[contains(@class,'sticky newsletter')])”)
xml\u remove(一个%>%xml\u find\u all(“/*[contains(@class,'site header')])”)
xml\u remove(一个%>%xml\u find\u all(“//*[contains(@class,.fb\u iframe\u widget')]))
xml\u remove(一个%>%xml\u find\u all(“//*[包含(@class,'.\u 8f1i')]))
xml\u remove(一个%>%xml\u find\u all(“//*[contains(@class,'newsletter toggle')]))
#xml\u remove(一个%>%xml\u find\u all(“//*[contains(@class,'articleBody')]”)
#xml\u remove(a%>%xml\u find\u all(“//href=”([^\“]*)”)
xml2::write_html(a,file=paste0(“html/”,filename“.html”))
tryCatch(pagedown::chrome_print(输入=paste0(“html/”,文件名“.html”),
输出=粘贴0(“pdf/”,文件名“.pdf”),
format=“pdf”,超时=300,详细=0,
等待=20),错误=函数(e)粘贴(“错误”))
}
你可以看到我在下面看到的屏幕截图。包含URL的“<>”部分不应该显示。它应该只显示“King's Brew”
试试这样的方法:
library(dplyr)
library(xml2)
allHref <- a %>% xml_find_all("//a")
for (l in allHref) {
cntnt <- l %>% xml_text(trim = T)
xml_replace(l, read_xml(paste0("<span>", cntnt, "</span>")))
}
库(dplyr)
库(xml2)
allHref%xml\u查找所有(//a)
for(all href中的l){
cntnt%xml\u文本(修剪=T)
xml_替换(l,读取_xml(粘贴0(“,cntnt,”))
}
首先,我们找到所有链接。然后,对于每一个链接,我们提取其内容,并用此内容替换链接本身。能否添加PDF.Done中看到的内容的屏幕截图。是否有一种方法可以提取所有“href”“从XML中删除节点,然后从总文本中删除这些字符串?或者,我已经读过,我可以将href设置为NULL,它会删除文本后面的链接,但我还没有让它起作用。