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.com
成http://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文件。