在 R 中抓取网站链接
Scrape website links in R
在抓取 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">
如您所见,它们仅在最后一部分有所不同。你知道我怎样才能抓取(定义)只有促销/没有促销的链接吗?
所以让我们将 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
使用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")
在抓取 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">
如您所见,它们仅在最后一部分有所不同。你知道我怎样才能抓取(定义)只有促销/没有促销的链接吗?
所以让我们将 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
使用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")