我正在尝试从新闻网站收集标题/标题和其他元素。但是,我正在使用的标签(使用小工具选择器并检查了网站代码已发现)似乎无法正常工作。
对于标题,我尝试使用标签“ .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)中收集信息,则这些相同的标签也可以正常工作。可能是什么问题?
答案 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)})