从新闻网站抓取内容时遇到问题

时间:2019-07-26 08:41:37

标签: r web-scraping rvest

我正在尝试从新闻网站收集标题/标题和其他元素。但是,我正在使用的标签(使用小工具选择器并检查了网站代码已发现)似乎无法正常工作。

对于标题,我尝试使用标签“ .article-h”和“ .article-h-link”,但没有结果。日期(“ .date.right”)和销售线索(“ .result-intro”)的情况相同

url_test <- read_html('https://www.semana.com/Buscador?query=proceso%20paz%20farc&post=semana&limit=10&offset=0&from=2012%2F08%2F26&to=2016%2F12%2F03')
titles <- html_text(html_nodes(url_test, '.article-h-link'))

我总是得到“字符(0)”。但是,有趣的是,如果尝试在主页(www.semana.com)中收集信息,则这些相同的标签也可以正常工作。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

通过浏览器中运行的javascript动态加载内容。 rvest不会发生这种情况。您可能需要使用RSelenium等浏览器自动化工具,也可以执行以下操作。

该页面会发出POST请求,您可以使用httr来模仿。

require(httr)
require(jsonlite)
require(magrittr)

headers = c(
  'User-Agent' = 'Mozilla/5.0',
  'Content-Type' = 'application/json; charset=UTF-8'
)

data = '{"request":{"param0":"query=proceso%20paz%20farc","param1":"post=semana","param7":"limit=10","param8":"offset=0", "param9":"from=2012/08/26", "param10":"to=2016/12/03"},"preview":false}'

res <- httr::POST(url = 'https://www.semana.com/ws/Buscador/ESPSearch', httr::add_headers(.headers=headers), body = data)

data <- content(res,as="text") %>% jsonlite::fromJSON(.)

某些json内容具有html作为关联值。这些将需要使用html解析器重新解析。您可以使用

浏览文章
df <- data$documents
print(df)

也许更容易进行正则表达式替换,以删除<span>之间的所有内容,因此您只剩下$highlights内的文本内容

转换为与R一起使用之前的基本正则表达式为:

<\/?span[^>]*>

例如

df$highlights <- lapply(df$highlights, function(x) {gsub("<\\/?span[^>]*>", "", x)})