杭州链家二手房数据
项目说明
练习爬虫相关技术,从网络上抓取数据,保存到本地csv文件和mongodb数据库I中,参考网络上相关资源实现二手房数据可视化,后面继续完善回归分析部分和预测分析。
项目实现
1. 数据获取
二手房数据可以从网络中获取即通过编写爬虫脚本从链家官网中获取相应数据。二手房数据主要采集房源区县信息、房源小区信息、房源户型、楼层信息、朝向信息、房屋面积信息、房屋建筑时间信息和房屋总价信息。具体实现以代码说明。
1.1 观察页面信息
红色方框中信息需要采集,但是缺少房源区县信息。简单处理方法是获取房源的链接地址,进入相关页面查找详细信息。
在页面中可以发现有目标信息,如果需要详细信息可以下基本信息中获取。
1.2 爬虫实现
基本思路:
使用 requests 请求页面数据,使用xpath解析页面数据获取目标信息,将数据保存到csv文件中和mongodb 数据库中。
- 定义初始化方法,提供URL和headers信息
def __init__(self, url, headers): """初始化设置""" # 访问页面 url地址 self.url = url # request请求头部 headers self.headers = headers
- 定义get_page()方法获取页面内容
def get_page(self, url, headers): """获取页面HTML内容""" try: # 发送连同headers的request请求,请求方法为get response = requests.get(url, headers=headers) # 判断返回状态码,若状态码为200,返回页面内容;反之返回None if response.status_code == 200: return response.text else: return None except RequestException: # 当请求异常时,返回None return None
- 定义parse_page()解析页面内容
selector = etree.HTML(html) selector.xpath(‘//li[@class="clear LOGCLICKDATA"]‘)
可以从中筛选出链接信息
根据链接发送请求再抓取目标信息
区县信息
小区信息
户型信息
......
最后使用yield 生成数据
yield {
"house_id": house_record,
"link": link,
"region": region,
"community": community,
"layout": layout,
"floor": floor,
"direction": direction,
"renovation": renovation,
"area": area,
"year": year,
"total_price": total_price,
}
定义save_to_csv()将数据存储到csv文件中
定义save_to_mongo()方法将数据保存到mongodb
为加快执行效率,采用多线程实现
from multiprocessing import Pool
if __name__ == "__main__":
pool = Pool()
pool.map(main, [i for i in range(1, 100 + 1)])
2. 数据处理
加载csv数据
在加载数据前需要对数据进行清除,这部分已在Excel中处理完成。
- 使用pandas读取csv文件
# 读取数据 csvfile = "second_hand_house.csv" lianjia_data = pd.read_csv(csvfile,dtype={"area":np.float,"year":np.int,"total_price":np.float})
- 预览数据
- 查看数据信息
可以看到数据类型设置已生效,默认数据类型是object,也就是字符串。 - 添加均价列数据
lianjia_data["avg_price"] = lianjia_data["total_price"]/lianjia_data["area"]
均价数据结果小数保留2位pd.set_option(‘precision‘, 2)
数据展示
查看杭州各区县均价
查看杭州各区县房源数量
查看户型分布情况
查看房源装修情况
查看下房源建筑时间分布
原文地址:https://blog.51cto.com/12631595/2369965
时间: 2024-10-29 12:02:12