分析武汉二手房房价信息
1. 爬取数据源获取原始数据
2. 分析数据
1)分析武汉各区的二手房均价排名
2)查找武汉二手房均价前30位的区域
3)查找武汉二手房均价前20位的小区名称
4)分析各种户型二手房的数量分布
本文通过分析武汉二手房均价的过程达到练习爬虫及数据分析的目的。
1. 爬取数据源获取原始数据
做数据分析首先得有数据,但是没有数据的话只能自己找了。先上代码
import requests
from lxml import etree
import time
import random
import pandas as pd
import numpy as np
class Price_Spider():
# 定义初始值
def __init__(self):
self.one_url = r'https://hf.lianjia.com/ershoufang/pg{}/'
self.headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'}`
# 访问一级页面链接并返回值
def get_one_html(self,url):
one_html = requests.get(url=url,headers=self.headers).text
# print(one_html)
return one_html
# 解析一级页面数据
def parse_one(self,one_html):
# print(one_html)
p = etree.HTML(one_html)
# two_html = p.xpath(r'//div[@class="content"]//div//ul//li//div[1]//div[1]//a[1]/@href')
two_html_url = p.xpath(r'//div[@class="info clear"]//div[@class="title"]//a/@href')
# two_html_url = p.xpath(r"//div[@class='info clear']//div[1]/a[1]/@href")
# print(two_html)
# self.get_two_html(two_html_url)
return two_html_url
# 访问二级页面链接并返回值
# 二手房详情页面可以从一级页面中解析出来
def get_two_html(self,two_html_url):
item_list = []
for single_two in two_html_url:
two_html = requests.get(url=single_two,headers=self.headers).text
# self.parse_two(two_html)
item_list.append(self.parse_two(two_html))
# time.sleep(random.randint(1,3))
return item_list
# 解析二级页面数据
def parse_two(self,two_html):
p = etree.HTML(two_html)
single_item_list = []
# 小区
single_item_list.append(''.join(p.xpath('/html/body/div[5]/div[2]/div[5]/div[1]/a[1]/text()')))
# 总价
single_item_list.append((float)(''.join(p.xpath('/html/body/div[5]/div[2]/div[3]/span[1]/text()'))))
# 单价
single_item_list.append((float)(''.join(p.xpath('/html/body/div[5]/div[2]/div[3]/div[1]/div[1]/span/text()'))))
# 面积
single_item_list.append((float)((''.join(p.xpath('//body/div[5]/div[2]/div[4]/div[3]/div[1]/text()')))[0:-2]))
# 户型
single_item_list.append(''.join(p.xpath('/html/body/div[5]/div[2]/div[4]/div[1]/div[1]/text()')))
# 楼层
single_item_list.append