从链家上爬取某地区二手房信息(各小区的名称、 价格及坐标),将所有信息绘制在坐标图
时间: 2024-04-03 14:31:27 浏览: 158
好的,这是一个比较复杂的问题,需要用到爬虫和数据可视化的技术。我会尽力回答你的问题。
首先,爬取链家网站的信息需要用到 Python 的 requests 和 BeautifulSoup 库。具体步骤如下:
1. 发送 GET 请求获取网页内容
```python
import requests
url = 'https://bj.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'}
response = requests.get(url, headers=headers)
```
2. 解析网页内容,获取所需信息
```python
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
house_list = soup.find('ul', {'class': 'sellListContent'}).find_all('li')
for house in house_list:
name = house.find('div', {'class': 'title'}).text.strip()
price = house.find('div', {'class': 'totalPrice'}).text.strip()
location = house.find('div', {'class': 'positionInfo'}).find('a').text.strip()
# 这里还可以获取更多信息,比如面积、朝向、装修等
```
3. 将获取到的信息保存到本地文件
```python
import csv
with open('house_info.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['name', 'price', 'location'])
for house in house_list:
name = house.find('div', {'class': 'title'}).text.strip()
price = house.find('div', {'class': 'totalPrice'}).text.strip()
location = house.find('div', {'class': 'positionInfo'}).find('a').text.strip()
writer.writerow([name, price, location])
```
接下来,我们需要将获取到的信息绘制在坐标图上。这可以用 Python 的 matplotlib 库来实现。具体步骤如下:
1. 读取本地的房屋信息文件
```python
import pandas as pd
df = pd.read_csv('house_info.csv')
```
2. 获取各小区的坐标信息
```python
import requests
import json
def get_location(address):
url = 'http://api.map.baidu.com/geocoding/v3/'
params = {
'address': address,
'output': 'json',
'ak': 'your_baidu_map_api_key'
}
response = requests.get(url, params=params)
result = json.loads(response.text)
if result['status'] == 0:
location = result['result']['location']
return location['lng'], location['lat']
else:
return None
df['location'] = df['location'].apply(get_location)
df = df.dropna(subset=['location'])
df[['lng', 'lat']] = pd.DataFrame(df['location'].tolist(), index=df.index)
```
3. 绘制坐标图
```python
import matplotlib.pyplot as plt
plt.scatter(df['lng'], df['lat'], s=30, c=df['price'], cmap='Reds')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.title('Housing Prices in Beijing')
plt.show()
```
这样就可以得到一个房价分布图了。当然,这只是一个简单的示例,如果你要对数据进行更多的处理和可视化,可以选择使用其他更强大的 Python 库,比如 pandas、numpy、seaborn 等。
阅读全文