使用 R 中的 rvest 库从网页中抓取信息
Scraping information from a webpage using the rvest library in R
示例:从此 webpage.
中抓取第一个海报标题
我有:
- 选择标题
- right-clicked 并在开发人员工具中检查了它
- 复制了 Xpath
这是我的代码:
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 的值为 varnish
。 Varnish 是一个 HTTP 缓存反向代理。我还注意到 X-Cache
header 值是 HIT
并且对于页面的两个版本都是如此,但是 X-Cache-Hits
和 Content-Length
值不同。开箱即用,当 Varnish 将 X-Cache
header 设置为 HIT
时,这意味着它正在从内存中返回一个缓存副本。 X-Cache-Hits
header 基本上是一个特定缓存页面返回次数的计数器。
如果不执行 cache-busting 可能被站点所有者视为滥用的请求,您就无法解决缓存问题。
示例:从此 webpage.
中抓取第一个海报标题我有:
- 选择标题
- right-clicked 并在开发人员工具中检查了它
- 复制了 Xpath
这是我的代码:
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 的值为 varnish
。 Varnish 是一个 HTTP 缓存反向代理。我还注意到 X-Cache
header 值是 HIT
并且对于页面的两个版本都是如此,但是 X-Cache-Hits
和 Content-Length
值不同。开箱即用,当 Varnish 将 X-Cache
header 设置为 HIT
时,这意味着它正在从内存中返回一个缓存副本。 X-Cache-Hits
header 基本上是一个特定缓存页面返回次数的计数器。
如果不执行 cache-busting 可能被站点所有者视为滥用的请求,您就无法解决缓存问题。