Python爬取房產數據,在地圖上展現!

小伙伴,我又來了,這次我們寫的是用python爬蟲爬取烏魯木齊的房產數據并展示在地圖上,地圖工具我用的是?BDP個人版-免費在線數據分析軟件,數據可視化軟件?,這個可以導入csv或者excel數據。

首先還是分析思路,爬取網站數據,獲取小區名稱,地址,價格,經緯度,保存在excel里。再把excel數據上傳到BDP網站,生成地圖報表

本次我使用的是scrapy框架,可能有點大材小用了,主要是剛學完用這個練練手,再寫代碼前我還是建議大家先分析網站,分析好數據,再去動手寫代碼,因為好的分析可以事半功倍,烏魯木齊樓盤,2017烏魯木齊新樓盤,烏魯木齊樓盤信息 - 烏魯木齊吉屋網?這個網站的數據比較全,每一頁獲取房產的LIST信息,并且翻頁,點進去是詳情頁,獲取房產的詳細信息(包含名稱,地址,房價,經緯度),再用pipelines保存item到excel里,最后在bdp生成地圖報表,廢話不多說上代碼:

JiwuspiderSpider.py

#?-*-?coding:?utf-8?-*-

fromscrapyimportSpider,Request

importre

fromjiwu.itemsimportJiwuItem

classJiwuspiderSpider(Spider):

name?="jiwuspider"

allowed_domains?=?["wlmq.jiwu.com"]

start_urls?=?['http://wlmq.jiwu.com/loupan']

defparse(self,?response):

"""

解析每一頁房屋的list

:param?response:

:return:

"""

forurlinresponse.xpath('//a[@class="index_scale"]/@href').extract():

yieldRequest(url,self.parse_html)#?取list集合中的url??調用詳情解析方法

#?如果下一頁屬性還存在,則把下一頁的url獲取出來

nextpage?=?response.xpath('//a[@class="tg-rownum-next?index-icon"]/@href').extract_first()

#判斷是否為空

ifnextpage:

yieldRequest(nextpage,self.parse)#回調自己繼續解析

defparse_html(self,response):

"""

解析每一個房產信息的詳情頁面,生成item

:param?response:

:return:

"""

pattern?=?re.compile('<script?type="text/javascript">.*?lng?=?'(.*?)';.*?lat?=?'(.*?)';.*?bname?=?'(.*?)';.*?'

'address?=?'(.*?)';.*?price?=?'(.*?)';',re.S)

item?=?JiwuItem()

results?=?re.findall(pattern,response.text)

forresultinresults:

item['name']?=?result[2]

item['address']?=?result[3]

#?對價格判斷只取數字,如果為空就設置為0

pricestr?=result[4]

pattern2?=?re.compile('(d+)')

s?=?re.findall(pattern2,pricestr)

iflen(s)?==0:

item['price']?=0

else:item['price']?=?s[0]

item['lng']?=?result[0]

item['lat']?=?result[1]

yielditem

item.py

#?-*-?coding:?utf-8?-*-

#?Define?here?the?models?for?your?scraped?items

#

#?See?documentation?in:

#?http://doc.scrapy.org/en/latest/topics/items.html

importscrapy

classJiwuItem(scrapy.Item):

#?define?the?fields?for?your?item?here?like:

name?=?scrapy.Field()

price?=scrapy.Field()

address?=scrapy.Field()

lng?=?scrapy.Field()

lat?=?scrapy.Field()

pass

pipelines.py 注意此處是吧mongodb的保存方法注釋了,可以自選選擇保存方式

#?-*-?coding:?utf-8?-*-

#?Define?your?item?pipelines?here

#

#?Don't?forget?to?add?your?pipeline?to?the?ITEM_PIPELINES?setting

#?See:?http://doc.scrapy.org/en/latest/topics/item-pipeline.html

importpymongo

fromscrapy.confimportsettings

fromopenpyxlimportworkbook

classJiwuPipeline(object):

wb?=?workbook.Workbook()

ws?=?wb.active

ws.append(['小區名稱','地址','價格','經度','緯度'])

def__init__(self):

#?獲取數據庫連接信息

host?=?settings['MONGODB_URL']

port?=?settings['MONGODB_PORT']

dbname?=?settings['MONGODB_DBNAME']

client?=?pymongo.MongoClient(host=host,?port=port)

#?定義數據庫

db?=?client[dbname]

self.table?=?db[settings['MONGODB_TABLE']]

defprocess_item(self,?item,?spider):

jiwu?=?dict(item)

#self.table.insert(jiwu)

line?=?[item['name'],?item['address'],?str(item['price']),?item['lng'],?item['lat']]

self.ws.append(line)

self.wb.save('jiwu.xlsx')

returnitem

最后報表的數據

mongodb數據庫

地圖報表效果圖:BDP分享儀表盤,分享可視化效果

https://me.bdp.cn/share/index.html?shareId=sdo_b697418ff7dc4f928bb25e3ac1d52348

V ? ? X ? 獲?取?更 多 精彩 內容

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

推薦閱讀更多精彩內容