“买房”是很多年轻人考虑的首要任务,但由于信息过于冗杂,很多人往往对一个地区的房产情况基本情况不甚了解,或者了解得比较片面,对于挑选一套最适合自己的房子更是无从下手。以天津市为例,笔者将分几个教程,从数据分析的角度,从繁杂的房产信息中一步步解析,从地段、房价、面积等各个维度,对天津地区的房产情况进行整体分析,为下一步的购房策略提供参考。
众所周知,买房子最重要的三件事“地段、地段、还是地段”,将所有的在售房源统一地展示在地图上,将直观地从整体上展现房源的空间分布特征,为进一步的分析做铺垫。因此,本文目标为使用python爬取链家的新房位置信息,并将其统一地展示在地图上。
1.python爬取链家房源
查看链家楼盘网页源代码,爬取楼盘的名称、所在区域、面积等信息,代码如下:
import requests
import re
import bs4
import pandas as pd
def parse_page(page_url):
print(page_url)
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3702.0 Safari/537.36'}
response = requests.get(page_url, headers = headers)
soup = bs4.BeautifulSoup(response.text)
name = [i.text.strip() for i in soup.findAll(name = 'a', attrs = {'class':'name'})]
district=[]
zone=[]
address=[]
location = [i.text.strip() for i in soup.findAll(name = 'div', attrs = {'class':'resblock-location'})]
for i0 in location:
i1=i0.split('\n/\n')
i2=i1[0]
i3=i1[1]
i4=i1[2]
district.append(i2)
zone.append(i3)
address.append(i4)
room_type = [i.text.strip() for i in soup.findAll(name = 'a', attrs = {'class':'resblock-room'})]
resblock_type = [i.text.strip() for i in soup.findAll(name = 'span', attrs = {'class':'resblock-type'})]
size = [i.text.strip() for i in soup.findAll(name = 'div', attrs = {'resblock-area'})]
unit = [i.text.strip() for i in soup.findAll(name = 'span', attrs = {'class':'number'})]
df=pd.DataFrame({'楼盘名':name,'地区':district,'区位':zone,'地址':address,'户型':room_type,'楼盘类型':resblock_type,'面积':size,'均价':unit})
table="C:\\楼盘.csv"
file=df.to_csv(table,mode='a',encoding='utf-8-sig')
print(df)
def main():
base_url="https://tj.fang.lianjia.com/loupan/pg{}/"
for x in range(1,49):
page_url=base_url.format(x)
parse_page(page_url)
main()
将同一个位置点的楼盘去重:
path1=r"C:\\楼盘.csv"
data=pd.read_csv(path)
df1=pd.DataFrame(data)
df2=df1.drop_duplicates(subset=['楼盘名'],keep='first',inplace=False)
path="C:\\楼盘_去重.xlsx"
file=df2.to_excel(path,startcol=0,index=False,encoding='utf-8-sig')
共爬取到667个楼盘的信息,楼盘信息效果显示:
2.地理编码
由于链家中不显示楼盘位置点的经纬度坐标,因此使用高德地图的“地理/逆地理编码 ”功能,将楼盘的地址信息转化为相应的坐标位置点。 代码如下:
path=r"C:\\Users\\lenovo\\Desktop\\楼盘_去重.xlsx"
data=pd.read_excel(path)
#读取楼盘名列
name=data.iloc[:,0]
#读取楼盘地址列
address=data.iloc[:,3]
geo=[]
for i in address:
parameters = {'address': i,'key': '','city':'天津'}
base ='http://restapi.amap.com/v3/geocode/geo'
response = requests.get(base, parameters)
answer = response.json()
if answer['info'] == 'OK':
loc=answer['geocodes'][0]['location']
loc1=loc
else:
loc1=0
geo.append(loc1)
print(i + ":", loc1)
writer=pd.ExcelWriter("C:\\Users\\lenovo\\Desktop\\geo.xlsx")
data={'楼盘名':name,'坐标':geo}
df=pd.DataFrame(data)
df.to_excel(writer,startcol=0,index=False )
writer.save()
坐标信息效果显示如下:
然后将高德地图的火星坐标系转化为WGS84坐标系
3.Tableau显示房源位置点
将天津楼盘信息导入Tableau中,空间分布特征如图:
可以发现天津链家的所有在售楼盘分布如图,楼盘分布过度集中,集中分布在天津中心城区,房地产资源分布不均。
以上就是python爬取链家房源并在地图上显示位置点的教程,可以以此直观地看出地区的房地产资源分布、房价空间分布等信息,为购房提供参考,后面将从更多维度对天津市在售楼盘情况予以更多解读并发布相应的分析教程,请点赞、收藏、关注!多多支持!