使用xml2和pagedown与R从HTML打印PDF时,请删除href和/或停用锚定链接

使用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

我正在使用R从一个食品博客中提取100篇文章,并将其转换为PDF格式。我已经完成了99%,但是当我打印最终的PDF时,在线超链接的URL就写在了文本中。我不希望每个链接都呈现为PDF中的文本,我相信在使用pagedown打印之前,我需要从HTML中删除href属性。有人知道怎么做吗?下面的示例代码应该可以让您进入我的pdf创建循环,阅读第一篇文章。初始部分将所有URL拉入一个向量。需要增强的部分,谢谢

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,它会删除文本后面的链接,但我还没有让它起作用。