帮我用python写一个爬虫爬取链家网站上北京地区的二手房房价,单价,户型,面积,关注度,并对这些数据进行可视化分析,以及多元回归分析,得出二手房各项数据对于关注度的影响
时间: 2023-06-16 08:07:21 浏览: 220
好的,这个任务需要用到 requests、BeautifulSoup、pandas、matplotlib、statsmodels 等库,先安装这些库:
```
pip install requests beautifulsoup4 pandas matplotlib statsmodels
```
然后开始编写爬虫程序,以下是代码:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 爬取的页面链接
url = 'https://bj.lianjia.com/ershoufang/'
# 发送请求
res = requests.get(url, headers=headers)
# 解析响应内容
soup = BeautifulSoup(res.text, 'html.parser')
# 获取总页数
total_page = int(soup.find('div', {'class': 'page-box house-lst-page-box'}).get('page-data').split(',')[0].split(':')[1])
# 初始化DataFrame
data = pd.DataFrame(columns=['小区名称', '单价', '户型', '面积', '关注度'])
# 遍历每一页
for i in range(total_page):
# 构建每一页的链接
page_url = url + 'pg' + str(i+1) + '/'
# 发送请求
res = requests.get(page_url, headers=headers)
# 解析响应内容
soup = BeautifulSoup(res.text, 'html.parser')
# 获取当前页的所有二手房信息
house_items = soup.find_all('div', {'class': 'info clear'})
# 遍历每个二手房信息
for item in house_items:
# 获取小区名称
title = item.find('div', {'class': 'title'}).text.strip()
# 获取单价
price = item.find('div', {'class': 'price'}).find('span').text.strip()
# 获取户型和面积
house_info = item.find('div', {'class': 'houseInfo'}).text.split('|')
layout = house_info[1].strip()
area = house_info[2].strip()[:-2]
# 获取关注度
follow_info = item.find('div', {'class': 'followInfo'}).text
follow = follow_info.split('/')[0].strip()
# 将数据添加到DataFrame中
data = data.append({'小区名称': title, '单价': price, '户型': layout, '面积': area, '关注度': follow}, ignore_index=True)
# 数据可视化分析
import matplotlib.pyplot as plt
# 统计不同户型的房屋数量
house_counts = data['户型'].value_counts()
plt.pie(house_counts, labels=house_counts.index, autopct='%1.1f%%')
plt.title('不同户型的房屋数量')
plt.show()
# 统计不同面积的房屋数量
area_counts = data['面积'].value_counts()
plt.bar(area_counts.index, area_counts.values)
plt.title('不同面积的房屋数量')
plt.show()
# 统计不同单价的房屋数量
price_counts = data['单价'].value_counts()
plt.bar(price_counts.index, price_counts.values)
plt.title('不同单价的房屋数量')
plt.show()
# 多元回归分析
from statsmodels.formula.api import ols
# 构建模型
model = ols('关注度 ~ 单价 + 面积 + C(户型)', data=data).fit()
# 查看模型摘要
print(model.summary())
```
运行程序后,会爬取链家网站上北京地区的二手房信息,并对数据进行可视化分析和多元回归分析,最终输出模型摘要。注意,由于数据是实时爬取的,所以每次运行程序得到的结果可能会有所不同。
阅读全文