爬取南京链家二手房信息,包括房屋的大标题、地址、面积、朝向、层高、年限、总价、等信息存储在表格中。并且使用matplotlib 绘图包对爬取的信息进行分析,绘制简单的图表。
时间: 2023-12-22 17:03:31 浏览: 122
好的,这个任务可以分为两部分:爬取数据和数据分析绘图。我会一步一步带你完成。
## 爬取数据
首先,我们需要确定爬取的网址和需要爬取的信息。根据要求,我们选择南京链家的二手房信息网站:https://nj.lianjia.com/ershoufang/。需要爬取的信息有:房屋的大标题、地址、面积、朝向、层高、年限、总价等信息。
接下来,我们使用Python的requests和BeautifulSoup库进行爬取和解析。代码如下:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = "https://nj.lianjia.com/ershoufang/"
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'}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
house_list = soup.select('.sellListContent li')
data_list = []
for house in house_list:
title = house.select('.title a')[0].text.strip()
address = house.select('.positionInfo a')[0].text.strip()
area = house.select('.houseInfo span')[1].text.strip()
direction = house.select('.houseInfo span')[6].text.strip()
floor = house.select('.houseInfo span')[2].text.strip()
year = house.select('.houseInfo span')[7].text.strip()
price = house.select('.totalPrice span')[0].text.strip()
data_list.append([title, address, area, direction, floor, year, price])
df = pd.DataFrame(data_list, columns=['title', 'address', 'area', 'direction', 'floor', 'year', 'price'])
df.to_excel('lianjia.xlsx', index=False)
```
我们首先使用requests库向网站发送请求,并使用BeautifulSoup库对返回的html文本进行解析。然后,我们使用CSS选择器从解析后的文本中提取出需要的信息,并将其存储到一个列表中。最后,我们将列表转换成DataFrame格式,并将其保存到Excel文件中。
## 数据分析绘图
得到数据后,我们可以使用matplotlib库对数据进行可视化分析。我们可以首先绘制房价的直方图,以了解房价的分布情况。代码如下:
```python
import matplotlib.pyplot as plt
df = pd.read_excel('lianjia.xlsx')
plt.hist(df['price'], bins=20)
plt.xlabel('Price')
plt.ylabel('Count')
plt.title('Histogram of House Price')
plt.show()
```
我们首先使用pandas库读取Excel文件中的数据,并使用matplotlib库绘制直方图。我们可以看到,房价主要集中在200-600万之间,但也有少量的高价房。
接下来,我们可以绘制房屋面积和房价之间的散点图,以了解房屋面积和房价之间的关系。代码如下:
```python
plt.scatter(df['area'], df['price'])
plt.xlabel('Area')
plt.ylabel('Price')
plt.title('Scatter Plot of House Area and Price')
plt.show()
```
我们可以看到,房屋面积和房价之间存在一定的正相关关系,即房屋面积越大,房价越高。
最后,我们可以绘制各个房源的地理分布图,以了解各个区域的房价水平。代码如下:
```python
import folium
df = pd.read_excel('lianjia.xlsx')
map = folium.Map(location=[31.946576, 118.789605], zoom_start=12)
for index, row in df.iterrows():
location = row['address']
price = row['price']
tooltip = f"Price: {price}万"
folium.Marker(location=[31.946576, 118.789605], tooltip=tooltip).add_to(map)
map.save('map.html')
```
我们使用folium库创建地图,并将每个房源的位置标记在地图上。标记的颜色和大小可以表示房价的高低和房屋面积的大小。在这里,为了简单起见,我们只是简单地将价格作为一个提示信息显示在标记上。最终,我们会得到一个html文件,可以在浏览器中打开查看。
到这里,我们就完成了对南京链家二手房信息的爬取和分析。
阅读全文