webscraping时元素数量不等

时间:2016-10-22 21:09:36

标签: r web-scraping rvest

我想从autotrader.co.uk获取一些汽车数据。当您在此网站上搜索时,每个页面都包含12辆车的信息。我正在单独抓价格和模型,它给了我2个元素的2个向量(使用rvest)。但是我无法单独划分里程,年龄等,因为它们与其他变量一致,并且每辆车的位置可能会根据卖家包含的变量数量而变化。 如果你看一下附图,用于丰田的注册年份的CSS将为我提供福特KA的CAT C而不是年份,因为这个变量位于这辆车的第二位。所以我必须使用CSS来获取整行信息。

enter image description here

我决定刮掉整行(命名为结果向量info)。然而,这种方法给了我一个80+元素的向量(对于每个变量,如年,英里等)。问题是我想在数据框中加入模型,价格和其他信息而我不能这样做,因为info的元素多于前两个向量。

我使用的代码:

URL <- "http://www.autotrader.co.uk/car-search?sort=price-asc&radius=1500&postcode=np198jj&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New&page="
link <-read_html(URL)
price <- html_nodes(link, ".search-result__price") %>%
    html_text()
info <- html_nodes(link, ".search-result__attributes li") %>%
        html_text()

使用xpath获取相同的80 +元素。 我还尝试在信息中对每辆车的元素进行联合处理,但没有成功:

str_replace_all(info, collapse = "---")

所以我的问题是如何抓取年份,里程等信息,以便这些都是每辆车的一个元素。另外,也许有可能将年份,里程和其他变量分开。

1 个答案:

答案 0 :(得分:0)

修正了网址并删除了li属性:

library(rvest)
URL <- "http://www.autotrader.co.uk/car-search?sort=price-asc&radius=1500&postcode=np198jj&onesearchad=Used&onesearchad=Nearly%20New&onesearchad=New"
> link <- read_html(URL)
> price <- html_nodes(link, ".search-result__price") %>%
>   html_text()
> info <- html_nodes(link, ".search-result__attributes") %>%
>   html_text()
> identical(length(price), length(info))
[1] TRUE