最近在学习python,不禁感叹其强大的数据处理能力,简单几句代码即可从互联网中获取千万数据。生活在这个数据为王的时代,我们需要学习着如何将数据为我所用。
作为一个两年研发三年产品的互联网青年,依然对苏州房价望而却步。房价天天涨,刚需勇可追,但是什么时候买?买哪里?价格如何?是最值得关心的几个问题,下面技术小哥哥附身,用技术和数据给你一个答案。
技术环境
环境:python3.6
引用模块:
urllib ——urllib提供了一系列用于操作URL的功能,urllib的request模块可以非常方便地抓取URL内容
BeautifulSoup ——可以从HTML或XML文件中很方便的提取数据
xlwt ——用于操作Excel将抓取的数据存储到Excel
数据图表:hcharts
获取苏州各区十年内房价数据
一、页面请求
安居客上提供了从2009年到现在苏州的房价数据,就看上了这部分数据,开始爬虫之旅。现在爬虫肆虐,很多网站都有防爬虫机制,有防的方式也有攻的方法,道高一尺魔高一丈,攻防较量不相上下。安居客上也有防御机制,第一次请求ip就被封了,以为不能爬了,几个小时后ip被释放了,python模拟浏览器请求,可正常抓取,没想到其防御机制不过如此而已。
#请求页面数据
def request_href(url):
#模拟浏览器请求
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'}
req = request.Request(url, headers=header)
resp = request.urlopen(req).read()
#网页数据保存到本地
#fhandle = open("./anjuke.html", "wb")
#fhandle.write(resp)
#fhandle.close()
return resp
二、数据解析
数据能够抓取到本地,就已经是成功打开了数据世界的大门,剩下的就是解析数据,分析页面获得需要的数据字段,逐个字段分析,这里数据解析使用的BeautifulSoup,它可以检索出整个页面中任何一个你所需要的字段,一层层剥去HTML的外衣,剩下的就是赤裸裸的数据。
'''
安居客房价走势数据
'''
#获取安居客苏州每个区域房价走势地址
def get_anjuke_trend_href():
url="https://www.anjuke.com/fangjia/suzhou2018/"
resp = request_href(url)
soup = BeautifulSoup(resp,"html.parser")
areas_hrefs=soup.find("span",class_="elem-l").find_all("a")
href_list=[url]
for item in areas_hrefs:
href_list.append(item.get("href"))
return href_list
#解析每个区 每年数据
def get_price_trend():
href=get_anjuke_trend_href()
workbook=xlwt.Workbook(encoding='utf-8') #创建工作簿
area_flag=''
for area in href:
area_all_price=[]
for year in range(2018,2008,-1):
url=area.replace(str("2018"), str(year), 2)
resp = request_href(url)
soup = BeautifulSoup(resp,"html.parser")
year_price=soup.find(class_="fjlist-box boxstyle2").find_all("li")
for mounth in year_price:
m_data=mounth.find_all(["b","span","em"])
y=m_data[0].string.split("年")
m=y[1].split("月")
price_info=m_data[1].string.split("元")
price=price_info[0]
price_unit='元/㎡'
if(len(price_info)>1):
price_unit="元"+ price_info[1]
a=url.split("/")
area_flag=a[len(a)-2]
m_datas=(m_data[0].string,price,price_unit,m_data[2].string,y[0]+"-"+m[0],area_flag,url)
area_all_price.append(m_datas)
save_area_price(workbook,area_flag,area_all_price)
三、数据存储
数据解析为我所需要的信息,剩下就是存储了,之前练习的时候有将爬取的数据存到MySql中,本次为了便于简单分析,直接将抓取的数据存储的Excel中,使用了xlwt 模块,简单几行代码就能将数据存储起来,非常方便。
#保存价格数据,每个区域一个sheet
def save_area_price(workbook,area_flag,area_all_price):
booksheet=workbook.add_sheet(area_flag, cell_overwrite_ok=True) #创建sheet
#表头
title=(u'日期',u'单价',u'单位',u'升降',u'年月',u'区域',u'地址')
area_all_price.insert(0,title)
#生成数据行内容
for row in range(0,len(area_all_price)):
for col in range(0,len(area_all_price[row])):
booksheet.write(row,col,area_all_price[row][col])
workbook.save('D:\python\安居客苏州房价走势数据3.xls') #保存文件
print("保存成功:"+str(len(area_all_price)))
四、数据分析
python本身也有很多包(5大数据分析包:Matplotlib 、Numpy 、Pandas 、Scikit-Learn 、Scipy )可用用于数据分析挖掘,本次没有做过多研究,使用了在线制表软件(数据图表:hcharts)生成了一些可视化的图表,简单做了几个数据趋势分析、占比分析和优势分析。
以下是安居客网站抓取的苏州十年数据,生成的趋势图:
此图告诫我们房价犹如登天的梯,无限延伸不见顶端。苏州房价在2016年初经历了一次山洪暴发似的增长,一跃成为新一线城市。因此还是老话说得好,买房要趁早。
另外还抓取了贝壳网目前在售的所有房源信息分析了苏州各区域住宅类房源的均价(排除别墅、商用、写字楼等),目前还算可以接受的属吴江、吴中、相城三个区的房价。
从目前在售的房源数量上看,吴中和吴江房源数量最多,正在吸收着一批批新苏州人,不断发展壮大的道路上。从地理优势上看濒临上海的吴江似乎更有潜力。
以下是贝壳网目前在售的所有新房房源信息(不包含二手房),供计划购房的同志们参考。
总结
什么时候买——如果首付攒够了就现在买吧,观望带来失望。
买哪里——吴江、吴中、相城将是新苏州城,个人更看好吴江。
价格如何——整体来看苏州房价还没那么离谱,该出手时就出手。
尽管国家对房价不断调控,增幅没那么陡峭了,但缓慢上升的趋势不可抑制,毕竟房价的上涨牵动着国家GDP的命脉。