北京地区二手房爬虫数据处理与展示
业余时间学的python,写的是关于北京的二手房爬虫,从数据的爬取,清洗,存取到数据可视化,然后利用sklearn的线性回归算法做了一个关于房价面积的预测,欢迎大家一块学习交流。https://github.com/zhaoyuetong/python
部分图片展示:
部分代码展示:
#导入相关库
import requests
import time
from bs4 import BeautifulSoup
import pandas as pd
#设置页面页的可变部分
page=('pg')
#设置请求头部信息
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept':'text/html;q=0.9,*/*;q=0.8',
'Accept-Charset':'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding':'gzip',
'Connection':'close',
'Referer':'http://www.baidu.com/link?url=_andhfsjjjKRgEWkj7i9cFmYYGsisrnm2A-TN3XZDQXxvGsM9k9ZZSnikW2Yds4s&wd=&eqid=c3435a7d00006bd600000003582bfd1f'
}
def main():
#设置列表页URL的固定部分
url='https://bj.lianjia.com/ershoufang/'
a=(url+page+'/')
r=requests.get(url=a,headers=headers)
html=r.content
#解析抓取的页面内容
lj=BeautifulSoup(html,'html.parser')
positionInfo=lj.find_all('div',attrs={'class':'section_sub_nav'})
#print(return_regin(positionInfo))
positionInfo = return_regin(positionInfo)
#print(positionInfo)
for regin in positionInfo:
regin1 =regin
url1 = url+regin
Crawling_data(url1,is_sellect(regin),regin1)
pass
#Crawling_data(url,positionInfo)
#h获取北京各个区
def return_regin(positionInfo):
a_lis = []
for item in positionInfo:
pzzr=item.find_all('a')
#print(pzzr)
for item in pzzr:
a_lis.append(item.get("href").split('/')[-2])
a_lis.pop()
return a_lis
pass
#判断当前选择的区
def is_sellect(regin):
url='https://bj.lianjia.com/ershoufang/'+regin+'/'
a=(url+page+'/')
r=requests.get(url=a,headers=headers)
html=r.content
#解析抓取的页面内容
lj=BeautifulSoup(html,'html.parser')
positionInfo=lj.find_all('div',attrs={'class':'section_sub_nav'})
#h获取各区域
for item in positionInfo:
pzzr=item.find_all('a')
#print(pzzr)
for item in pzzr:
link = item.get('class')
#判断如果是该区则返回
if link:
return item.string
pass
#判定数字
def is_number(s):
try:
float(s)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False
def Crawling_data(url1,regin,regin1):
#循环抓取列表页信息
for i in range(1,10):
if i == 1:
i=str(i)
a=(url1+'/'+page+i+'/')
r=requests.get(url=a,headers=headers)
html=r.content
else:
i=str(i)
a=(url1+'/'+page+i+'/')
r=requests.get(url=a,headers=headers)
html2=r.content
html = html + html2
#每次间隔0.5秒
time.sleep(0.5)
#解析抓取的页面内容
lj=BeautifulSoup(html,'html.parser')
#提取房源总价
price=lj.find_all('div',attrs={'class':'priceInfo'})
tp=[]
re = []
for a in price:
totalPrice=a.span.string
#print(totalPrice)
tp.append(totalPrice)
re.append(regin)
#提取房源信息
houseInfo=lj.find_all('div',attrs={'class':'houseInfo'})
#hi=[]
xiaoqu = []
huxing = []
mianji = []
chaoxiang = []
zhuangxiu = []
dianti = []
l = []
for b in houseInfo:
house=b.get_text()
#数据清洗
l = house.split('/')
#print(l.split('室'))
if len(l)==7:
del l
if len(l)==6 and not (is_number(l.split('室'))):
del l
if len(l)==5:
l.append('无电梯')
#hi.append(house)
#print(l)
xiaoqu.append(l)
huxing.append(l)
mianji.append(float(l.split('平米')))
chaoxiang.append(l)
zhuangxiu.append(l)
dianti.append(l)
#提取房源关注度
followInfo=lj.find_all('div',attrs={'class':'followInfo'})
guanzhu=[]
daikan=[]
unitprice = []
for c in followInfo:
follow=c.get_text()
if len(follow.split('/'))!=3:
print(follow.split('/'))
#print(len(follow.split('/'))!=3)
guanzhu.append(int(follow.split('/').split('人关注')))
daikan.append(int(follow.split('/').split('次带看')))
#fi.append(follow)
unitprice.append(int(follow.split('/').split('单价').split('元')))
#创建数据表
house=pd.DataFrame({'region':re,'totalprice':tp,'unitprice':unitprice,'xiaoqu':xiaoqu,'huxing':huxing,'mianji':mianji,'chaoxiang':chaoxiang,'zhuangxiu':zhuangxiu,'dianti':dianti,'guanzhu':guanzhu,'daikan':daikan})
print(len(house))
if len(house):
#保存数据
house.to_csv("lianjiawang"+regin1+".csv",encoding="GBK")
pass
if __name__ == '__main__':
main()
禁止发春 发表于 2019-6-15 23:30
LZ,可以直接把url改成其他城市的来获取其他城市的二手房数据吗
url改了需要修改代码的,因为不同城市的网站设置的class不一样,所以没什么办法,你可以在我的代码基础上进行修改 zyt温柔发 发表于 2019-6-16 00:03
url改了需要修改代码的,因为不同城市的网站设置的class不一样,所以没什么办法,你可以在我的代码基础上 ...
好的,感谢分享
老哥牛逼!!!!!! 要火呀,哥你厉害 LZ,可以直接把url改成其他城市的来获取其他城市的二手房数据吗 大哥 源代码可以分享一下么? 赞一个,很不错的数据统计。 哇,这个帖子好 老哥厉害!!!!!! 单变量线性回归?只有面积嘛
页:
[1]
2