Scrapy爬取鏈家網房源 高德地圖展示

1.代碼鏈接

https://github.com/happyte/buyhouse

2.最終效果圖

3.實現思路

  • 1.爬取的是鏈家網的成都地區(qū)的新房源,爬出房源的名字、價格、地址和url這四個。我是基于python的scrapy實現爬蟲的。

  • 2.在終端安裝scrapy,使用命令pip install scrapy,安裝完后新建項目scrapy startproject fangjia

  • 3.明確需要爬取的數據,在items.py文件中寫入需要爬取的數據。在scrapy中,Item是用來抓取內容的容器,類似python中的字典。

import scrapy
class FangjiaItem(scrapy.Item):
    FANGJIA_ADDRESS = scrapy.Field()    # 住房地址
    FANGJIA_NAME = scrapy.Field()       # 名字
    FANGJIA_PRICE = scrapy.Field()      # 房價
    FANGJIA_URL = scrapy.Field()        # 房源url
  • 4.下面分析下網頁,來到成都房源的首頁,一共有19個分頁,分頁的url例如http://cd.fang.lianjia.com/loupan/nht1/, 最后一個數字代表頁數。查看網頁源代碼如下:


    可以直接在該網頁抓取我們想要的房名、地址、價格和url。我的方法是先抓取url,再進入具體網頁抓取想要的數據。從上圖可以看到a標簽的href="/loupan/p_chaygceqaausi/" 即為我們想要的相對路徑,拼接http://cd.fang.lianjia.comhttp://cd.fang.lianjia.com/loupan/p_chaygceqaausi/ 即為我們需要的url。

  • 5.使用xpath抓取上面的a標簽中的href,fang_links = response.xpath('//div[@class="list-wrap"]/ul[@id="house-lst"]/li/div[@class="pic-panel"]/a/@href').extract() 抓取一個頁面的所有的url集合,遍歷上面的集合,請求具體頁面。

  • 6.來到一個具體頁面分析,抓取我們要的數據標簽位置

  • 房源名字


  • 房源單價


  • 房源地址


抓取的代碼如下:

name = response.xpath('//div[@class="name-box"]/a/@title').extract()[0]
       url = response.xpath('//div[@class="name-box"]/a/@href').extract()[0]
       price = response.xpath('//p[@class="jiage"]/span[@class="junjia"]/text()').extract()[0]
       address = response.xpath('//p[@class="where"]/span/@title').extract()[0]
  • 7.把上面抓取的數據放入item中,創(chuàng)建一個items.py定義的FangjiaItem類對象,最終輸出這個對象item
item['FANGJIA_NAME'] = name
item['FANGJIA_ADDRESS'] = address
item['FANGJIA_PRICE'] = price
item['FANGJIA_URL'] = 'http://cd.fang.lianjia.com'+url
yield item
  • 8.在scrapy工程的settings.py文件中要設置如下代碼:
ITEM_PIPELINES = {
    'fangjia.pipelines.FangjiaPipeline':300
}

高德地圖API調用

采用高德地圖對房源進行可視化操作,在工程根目錄下創(chuàng)建demo.html文件,頁面大框架可直接從示例中心復制:高德 JavaScript API 示例中心http://lbs.amap.com/api/javascript-api/example/map/map-show/。 具體可以看我倉庫中的demo.html文件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容