python多进程爬取上海房价并画出热⼒图分析
⼀、分析⽬的
1.探索上海市的房价区域分布
2.看看购房者都喜欢购买哪⾥的房⼦
⼆、数据采集
采集我爱我家上海区域的⼀万两千个⼩区的数据,采集的字段有⼩区、位置、最近30条成交套数、在售、在租、成交均价、成交总价、⼩区详细
介绍等数据。直接上代码:
import requests,codecs
import pymongo,time
from lxml import html
from multiprocessing import Pool
def get_content(j):
print('正在爬取第{}页,还剩{}页'.format(j,561-j))
url='/xiaoqu/n{}/_?zn='.format(j)
r=(url)
r=ring()
lenth=len(('//ul[@class="pList"]/li'))
try:
for i in range(1,lenth):
urls=('//ul[@class="pList"]/li[{0}]/div[2]/h3/a/@href'.format(i))[0]
community=('//ul[@class="pList"]/li[{0}]/div[2]/h3/a/text()'.format(i))[0]
deal=('//ul[@class="pList"]/li[{0}]//div[2]/div[1]/p[1]/span[1]/a/text()'.format(i))[0]
onsale=('//ul[@class="pList"]/li[{0}]//div[2]/div[1]/p[1]/span[2]/a/text()'.format(i))[0].replace('r','').replace('n','').strip()
rent=('//ul[@class="pList"]/li[{0}]//div[2]/div[1]/p[1]/span[3]/a/text()'.format(i))[0].replace('r','').replace('n','').strip()
#addr=('//ul[@class="pList"]/li[{0}]/div[2]/div[1]/p[3]/text()'.format(i))[0].replace('r','').replace('n','').strip()
avgprice=('//ul[@class="pList"]/li[{0}]//div[2]/div[1]/div/p[1]/strong/text()'.format(i))[0]
totalprice=('//ul[@class="pList"]/li[{0}]//div[2]/div[1]/div/p[2]/text()'.format(i))[0]
output="{}t{}t{}t{}t{}t{}t{}n".format(community,deal,onsale,rent,avgprice,totalprice,urls)
savetoexcel(output)
except Exception as e:
print(e)
print('爬取失败')
def savetoexcel(output):
try:
f=('','a+','utf-8')
(output)
()
except Exception as e:
print('写⼊失败')
if __name__ == '__main__':
pool=Pool(processes=2)
(get_content,list(range(1,561)))
()
()
采集下来是这个样⼦的:
image
接着利⽤⾼德API把⼩区转换为经纬度坐标,这个代码就不贴了。转换之后变成这样:
image
三、数据可视化
利⽤百度地图API⽣成热⼒图。
* * *
ul,li{list-style: none;margin:0;padding:0;float:left;}
html{height:100%}
body{height:100%;margin:0px;padding:0px;font-family:"微软雅⿊";}
#container{height:500px;width:100%;}
#r-result{width:100%;}