我正在使用R进行网页抓取,最近正在做一些练习。 我目前在当地的eBay列表中玩耍,在那里我可以抓取有关单个列表的文本信息。但是,我尝试了不同的选择来也刮取列表的视图数。但是没有任何东西可以给我显示在页面上的数字。
页面链接是这个
综合浏览量位于图片的右下方(当前为00044次浏览)
我能够使用以下代码检索文本:
pageURL <- read_html("https://www.ebay-kleinanzeigen.de/s-anzeige/zahnpflege-fuer-hunde-und-katzen-extra-stark-gegen-mundgeruch/1281544930-313-3170")
input <- pageURL %>%
html_nodes(xpath="/html/body/div[1]/div[2]/div/section[1]/section/section/article/section[1]/section/dl") %>%
html_text()
write.csv2(input, "example_listing.csv")
任何帮助我们都非常感谢-我认为views节点没有什么不同。我尝试了xpath和完整的xpath,但没有结果。
答案 0 :(得分:1)
问题是您要抓取的元素中的文本在您解析的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>
发生的情况是,当您使用Web浏览器时,您请求的页面包含JavaScript,浏览器将自动运行该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)
您将获得所要查找的文本,包括页面浏览量。