使用 R 中的 rvest 库从网页中抓取信息

Scraping information from a webpage using the rvest library in R

示例:从此 webpage.

中抓取第一个海报标题

我有:

这是我的代码:

    url   <- "https://www.aiche.org/academy/conferences/synthetic-biology-engineering-evolution-design-seed/2021/proceeding/session/poster-presenters-accepted"
    xpath <- "/html/body/div[1]/div[5]/section/div[2]/div/div[2]/div/div[3]/div/div/article/div/div/div[2]/div[2]/div[1]/div[1]/div[2]/span/a"

    url %>%
     read_html() %>%
     html_element(xpath = xpath) %>%
     html_text()

问题:为什么我不总是提取第一个标题?

简单的回答是,您正在评估的页面的响应 body 在请求之间发生变化。当我将 URL 加载到浏览器并强制重新加载页面时(Command+Shift+R for Chrome on Mac,Control+F5 for Windows)次,显示不同版本的页面。

首先:

第二:

较长的答案是,由于站点的缓存配置错误、负载平衡配置错误或两者兼而有之,页面的这两个变体似乎正在返回。

我通过查看几个请求的响应 header 得出了这个结论。 Via header 的值为 varnishVarnish 是一个 HTTP 缓存反向代理。我还注意到 X-Cache header 值是 HIT 并且对于页面的两个版本都是如此,但是 X-Cache-HitsContent-Length 值不同。开箱即用,当 Varnish 将 X-Cache header 设置为 HIT 时,这意味着它正在从内存中返回一个缓存副本。 X-Cache-Hits header 基本上是一个特定缓存页面返回次数的计数器。

如果不执行 cache-busting 可能被站点所有者视为滥用的请求,您就无法解决缓存问题。