问题是您尝试抓取的元素中的文本在您正在解析的 html 中不存在。您可以通过执行以下操作来检查:
library(magrittr)
library(httr)
url <- paste("https://www.ebay-kleinanzeigen.de/s-anzeige/",
"zahnpflege-fuer-hunde-und-katzen-extra-stark",
"-gegen-mundgeruch/1281544930-313-3170", collapse = "")
page <- url %>% GET %>% content("text")
substr(page, 72144, 72177)
#>[1] "<span id=\"viewad-cntr-num\"></span>"
然而,如果你在 Chrome 或 Firefox 的开发者工具中查看这个项目,你会发现这里应该有一个数字:
<span id="viewad-cntr-num">00047</span>
发生的情况是,当您使用网络浏览器时,您请求的页面包含浏览器自动运行的 javascript。在这种情况下,它会向服务器发送更多请求以下载额外信息,并将其插入页面。
但是,当您使用 rvest 或类似工具时,会下载原始 html 页面,但不会运行 javascript。因此,后续的请求都不会发出,空字段也无法被抓取。
在这种情况下,很容易找到下载页面浏览次数的链接,因为该链接实际上在您下载的 html 页面上:
url2 <- strsplit(strsplit(page, "viewAdCounterUrl: '")[[1]][2], "'")[[1]][1]
url2
#> [1] "https://www.ebay-kleinanzeigen.de/s-vac-inc-get.json?adId=1281544930&userId=50592093"
page_views <- url2 %>% GET %>% content("text")
page_views
#> [1] "{\"numVisits\":52,\"numVisitsStr\":\"00052\"}"
您可以看到服务器返回了一个简短的 JSON,其中包含您要查找的内容。您可以手动执行 javascript 所做的操作并将信息重新插入到页面中,如下所示:
page_views <- strsplit(strsplit(page_views, "\":\"")[[1]][2], "\"")[[1]][1]
tag <- "<span id=\"viewad-cntr-num\">"
page <- sub(tag, paste0(tag, page_views), page)
现在你可以这样做了:
input <- page %>%
read_html %>%
html_nodes(xpath="//section[@class=\"l-container\"]") %>%
html_text() %>% extract(1)
你会得到你正在寻找的文字,包括页面浏览量。