【问题标题】:Problems scraping content from a news website从新闻网站抓取内容的问题
【发布时间】:2019-07-26 08:41:37
【问题描述】:

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

对于标题,我尝试了标签“.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) 中收集信息,这些相同的标签可以毫无问题地工作。可能是什么问题?

【问题讨论】:

  • 内容是通过在浏览器中运行的 javascript 动态加载的。 rvest 不会发生这种情况。您可能需要浏览器自动化,例如 RSelenium。

标签: r web-scraping rvest


【解决方案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)

也许更简单的方法是进行正则表达式替换以删除&lt;span&gt; 之间的任何内容,这样您就只剩下$highlights 中的文本内容了

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

<\/?span[^>]*>

例如

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 2017-04-05
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    相关资源
    最近更新 更多