前言:很早之前学了爬虫,但是一直没有对爬虫数据进行分析过,最近爬了2019年2月份的58同城杭州租房信息,希望分析一下杭州房租情况,租金分布是怎么样的,哪里的性价比最好。
数据来源
数据是集采于58同城的租房信息(代码见https://github.com/guigui1992/58_spider)
数据如图1所示,包含字段:title, room_type, area, address, department, rent_origin_type, rent_origin, price
图2是58租房页面信息分别对应表里的字段
由于爬数据的时候没有对数据进行过清洗和特别的处理,所以可以看到表里的字段里面的值里面有很多空格,另外如户型和面积的信息被提取在同一个字段里面了。接下里需要对数据进行一下清洗。
数据预处理
数据清洗
对title,room_type,address,rent_origin等字段进行解析,冗余信息处理(eg:空格 m2),从而得到租赁类型(eg:单间和整租),面积,商圈,公寓,经纪公司。
#数据清洗
info['type']=info['title'].str.split('|',expand=True)[0].str.replace('[\n\s+]','')
info['m_area']=info['room_type'].str.replace('\s+|㎡','#').str.split('#',expand=True)[1].astype(float)
info['m_room_type']=info['room_type'].str.replace('\s+','#').str.split('#',expand=True)[0]
info['m_room_type']=info.m_room_type.str.replace('两','2')
info['send_time']=info['send_time'].str.replace('[\n\s+]','')
info['m_rent_origin']=info['rent_origin'].str.replace('[\n\s+]','')
info['m_department']=info['address'].str.split(';',expand=True)[1]
info['m_address']=info['address'].str.split(';',expand=True)[0]
info['price_int']=info[info['price']!='面议']['price'].astype(float)
info['fee_avg_square']=info.apply(lambda info: info['price_int'] / info['m_area'], axis=1)
地址解析
由于没有爬虫的数据里面没有区域信息如西湖区,江干区,区域又是重要的分析维度,因此调用了google的接口根据公寓名获得具体的经纬度,再根据经纬度获取区域信息
# 地址解析 根据地址名称返回经纬度
import requests
def geocode(address):
parameters = {
'address': address, 'key': 'XXXXXXX'} ## key 高德api注册,申请一个应用可以获得
base = 'http://restapi.amap.com/v3/geocode/geo'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
'Cookie': 'id58=c5/njVpymhR0X0thDRuHAg==; commontopbar_new_city_info=79%7C%E6%9D%AD%E5%B7%9E%7Chz; 58tj_uuid=763a5398-da95-4db2-9a54-ba7f4171f17c; new_uv=1; wmda_uuid=80797b44db9604b45dfbf4807417e58f; wmda_new_uuid=1; wmda_visited_projects=%3B2385390625025; commontopbar_ipcity=hz%7C%E6%9D%AD%E5%B7%9E%7C0; commontopbar_myfeet_tooltip=end; als=0; xxzl_deviceid=d7wGUAUqik8MomhIMsEH98iyUnHRBDyrCJYsasv1uq9biXZ%2F%2Bxav%2BhZr%2FQQmLjYF; wmda_session_id_2385390625025=1517477544470-6db397e1-9d59-3e58'
#'Host': 'cdata.58.com',
#'Referer': 'http://webim.58.com/index?p=rb'
}
response = requests.get(base, parameters,headers=headers)
answer = response.json()
print(address)
print(answer)
return answer['geocodes'][0]['location']
#print(address + "的经纬度:", answer['geocodes'][0]['location'])
info['department1']='杭州市'+info['m_department']
info['lngandlat']=info[info['department1'