R语言:rvest抓取赶集网北京海淀区房产数据(应该有更好的办法)


    这个办法可能比较原始,但是部分解决了我的问题。第一个循环生成第一页的数据集。后面第二个循环,从第二页到第20页,把取到的数据合并到第一个数据集中。

    现在的问题是汉字乱码,只好不收集汉字信息。


  install.packages("rvest")
  library(rvest)
  rm(iDataAll)


  for(i in 1:1){
    gurl <- paste0("http://bj.ganji.com/fang5/haidian/o",i,"/")
    print(gurl)
    tmp <- gurl %>% html_session %>% read_html(encoding="utf-8") %>% html_nodes("div.f-main-list>div>div")
    
    # 面积
    iArea <- tmp %>% html_nodes("dl>dd[data-huxing]") %>% html_attr("data-area") %>% 
      gsub(pattern="[^0-9]",replacement="")
    # 筛选朝向等数据
    iTmp <- tmp %>% html_nodes("dl>dd[data-huxing]>span") %>% html_text
    # 提取价格
    iPrice <- tmp %>% html_nodes("dl>dd>div.price>span:first-child") %>% html_text
    # 提取单价
    iTime <- tmp %>% html_nodes("dl>dd>div.time") %>% html_text %>% 
      gsub(pattern="[^0-9]",replacement="") %>% as.numeric
    
    # 合并数据框
    iDataAll <- data.frame(
      iArea=iArea,
      iPrice=iPrice,
      iTime=iTime,
      stringsAsFactors=FALSE)
    
  }   
  
  for(i in 2:20){
    gurl <- paste0("http://bj.ganji.com/fang5/haidian/o",i,"/")
    print(gurl)
    tmp <- gurl %>% html_session %>% read_html(encoding="utf-8") %>% html_nodes("div.f-main-list>div>div")
    
    # 面积
    iArea <- tmp %>% html_nodes("dl>dd[data-huxing]") %>% html_attr("data-area") %>% 
      gsub(pattern="[^0-9]",replacement="")
    # 筛选朝向等数据
    iTmp <- tmp %>% html_nodes("dl>dd[data-huxing]>span") %>% html_text
    # 提取价格
    iPrice <- tmp %>% html_nodes("dl>dd>div.price>span:first-child") %>% html_text
    # 提取单价
    iTime <- tmp %>% html_nodes("dl>dd>div.time") %>% html_text %>% 
      gsub(pattern="[^0-9]",replacement="") %>% as.numeric
    
    # 合并数据框
    iData <- data.frame(
      iArea=iArea,
      iPrice=iPrice,
      iTime=iTime,
      stringsAsFactors=FALSE)
    
    iDataAll <- rbind(iDataAll, iData)
    
  } 
  

  iDataAll
  summary(iDataAll)
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值