时间:2018-10-9
爬取内容:贝壳网租房信息


R语言爬虫:贝壳网租房信息

对贝壳网在郑州金水区的租房信息进行了爬取,在此进行简单记录,日后有时间在对代码内容进行解释说明。

网页界面如下:
R语言爬虫:贝壳网租房信息
贝壳网对于独栋公寓和其他类型的公寓的网页内容不同。
独栋公寓:
R语言爬虫:贝壳网租房信息
R语言爬虫:贝壳网租房信息
R语言爬虫:贝壳网租房信息
其他类型:
R语言爬虫:贝壳网租房信息
R语言爬虫:贝壳网租房信息
可以看出,同一个独栋公寓的在租户型有多种类型,而其他公寓只有一个类型,且独栋公寓的地址在页面中有以文本形式显示。因此对于独栋公寓,我们爬取其名称,房租,以及地址;对于其他类型,我们爬取其名称,面积,户型以及价格。
通过观察发现,独栋公寓的网址和其他类型的网址格式不同:
独栋公寓:
https://zz.zu.ke.com/apartment/7698.html?nav=200600000001
https://zz.zu.ke.com/apartment/7704.html?nav=200600000001
……
其他:
https://zz.zu.ke.com/zufang/ZZ2086065239840784384.html?nav=200600000001
https://zz.zu.ke.com/zufang/ZZ2096834091965497344.html?nav=200600000001
……
可以看出,各租房信息的网址之间只有中间部分不同,且独栋公寓为长度20的字符串,而其他类型的为长度为34的字符串。因此可以根据这个特点使用if语句对其进行不同处理。

代码如下:

library(rvest)
library(XML)
library(stringr)
u <- "https://zz.zu.ke.com/zufang/jinshui/pg1rt200600000001/"
web0 <- read_html(u)
link <- html_nodes(web0, ".link") %>% html_attr("href")
name <- NULL
price <- NULL
address <- NULL
area <- NULL
type <- NULL
t <- sample(seq(1,3, by = 1), length(link), replace = TRUE)
url0 <- "https://zz.zu.ke.com"
url1 <- "?nav=200600000001"
for (i in 1:length(link)){
  url <- paste0(url0, link[i], url1)
  web <- read_html(url)
  if (str_length(link[i]) == 20){
    name0 <- html_nodes(web, ".aside_neme") %>% html_text()
    name <- c(name, name0)
    price0 <- html_nodes(web, "br+ span") %>% html_text()
    price <- c(price, price0)
    address0 <- html_nodes(web, ".flat__info--subtitle") %>% html_text() %>%
      str_replace_all("[0-9]{10}.{1}[0-9]{4}", "") %>%
      str_replace_all(" ", "") %>% str_replace_all("\n", "")
    address <- c(address, address0)
    area0 <- NA
    area <- c(area, area0)
    type0 <- NA
    type <- c(type, type0)
    
  }
  else if(str_length(link[i]) == 34){
    name0 <- html_nodes(web, ".content__title") %>% html_text()
    name <- c(name, name0)
    price0 <- html_nodes(web, ".content__aside--title") %>% html_text()
    price <- c(price, price0)
    area0 <- html_nodes(web, ".content__article__table span:nth-child(3)") %>% html_text()
    area <- c(area, area0)
    type0 <- html_nodes(web, ".content__article__table span:nth-child(2)") %>% html_text()
    type <- c(type, type0)
    address0 <- NA
    address <- c(address, address0)
  }
  Sys.sleep(t[i])
}
Data <- data.frame(name, price, area, type, address)

爬取的数据如下:
R语言爬虫:贝壳网租房信息

注:本次爬虫只爬取第一页的信息,修改u中pg后的数字即可爬取其他页的信息。

相关文章: