当你刮掉R中的链接时使用rvest或RSelenium,你可以通过定义HTML代码的开头部分来实现,例如:给定节点内的href。如果我面对以下2个链接怎么办?
<a href="some_link" data-tracking="click_body" data-tracking-data='{"touch_point_button":"photo"}' data-featured-tracking="listing_no_promo">
<a href="some_link" data-tracking="click_body" data-tracking-data='{"touch_point_button":"photo"}' data-featured-tracking="listing_promo">
你可能会发现它们与最后一部分不同。你知道我怎么能抓住(定义)只有促销/没有促销的链接?
答案 0 :(得分:1)
因此,让我们将links
定义为包含html字符串的对象,例如
links <- html_children(read_html("https://www.otodom.pl/sprzedaz/mieszkanie/"))
然后你可以使用正则表达式匹配这些字符串中的“promo”/“no_promo”,参见
p1 <- grepl("promo", links, fixed = TRUE)
p1
[1] TRUE TRUE
p2 <- grepl("no_promo", links, fixed = TRUE)
p2
[1] FALSE TRUE
所以links[p1]
包含所有包含“promo”的字符串(所以“no_promo”也是如此),links[p2]
包含所有包含“no_promo”的字符串。现在剩下的就是子集:
promo <- links[p1-p2] # contains strings with promo but not with no_promo
no.promo <- links[p2] # contains strings with no_promo
答案 1 :(得分:1)
使用xpath
和XML
库:
假设您正在寻找no_promo链接:
library(XML)
library(httr)
response <- GET(yourLink)
parsedoc <- htmlParse(response)
xpathSApply(parsedoc, "//a[@data-featured-tracking='listing_no_promo']", xmlGetAttr, "href")
或者如果您只是在data-featured-tracking参数中查找包含关键字“no_promo”的链接,那么最后一部分将是:
xpathSApply(parsedoc, "//a[contains(@data-featured-tracking, 'no_promo')]", xmlGetAttr, "href")