我爬取了链家网上100页3000条房子的信息详细页面的内容,包括总价、单价、小区名称、所在区域以及基本信息里的内容,每个内容作为一个字段名,字段名称和网页上名称相同,将这些详细信息存入一个csv格式文件里面后
import requests # 导入requests库,用于发送HTTP请求
from bs4 import BeautifulSoup # 从bs4库中导入BeautifulSoup,用于解析HTML
import csv # 导入csv库,用于读写CSV文件
import time # 导入time库,用于计时
import concurrent.futures # 导入concurrent.futures库,用于并发处理
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import matplotlib.font_manager as fm
# 定义函数从单个页面爬取房屋详情
def scrape_page(url):
response = requests.get(url) # 发送HTTP GET请求获取页面内容
soup = BeautifulSoup(response.text, 'html.parser') # 使用BeautifulSoup解析页面内容
house_list = soup.find_all('div', class_='info clear') # 查找页面中所有房屋信息的元素
data = [] # 创建一个空列表,用于存储房屋信息
for house in house_list: # 遍历每个房屋信息元素
detail = {} # 创建一个空字典,用于存储单个房屋的详细信息
detail['总价'] = house.find('div', class_='totalPrice').text.strip() # 获取房屋总价并去除空白字符
detail['单价'] = house.find('div', class_='unitPrice').text.strip() # 获取房屋单价并去除空白字符
detail['小区名称'] = house.find('div', class_='positionInfo').a.text.strip() # 获取小区名称并去除空白字符
detail['所在区域'] = house.find('div', class_='positionInfo').a.next_sibling.next_sibling.text.strip() # 获取所在区域并去除空白字符
house_info = house.find('div', class_='houseInfo').text.split('|') # 将房屋信息按竖线分割成列表
detail['房型'] = house_info[1].strip() # 获取房型并去除空白字符
detail['朝向'] = house_info[2].strip() # 获取朝向并去除空白字符
detail['楼层'] = house_info[3].strip() if len(house_info) > 3 else 'N/A' # 获取楼层并去除空白字符,若无楼层信息则设为'N/A'
detail['面积'] = house_info[4].strip() # 获取面积并去除空白字符
detail['用途'] = house_info[5].strip() # 获取用途并去除空白字符
data.append(detail) # 将单个房屋的详细信息添加到数据列表中
return data # 返回包含房屋详细信息的列表
# 主函数用于爬取多个页面并将数据保存到CSV文件中
def scrape_lianjia():
start_time = time.time() # 记录开始时间
all_data = [] # 创建一个空列表,用于存储所有房屋的详细信息
for page in range(1, 101): # 遍历100个页面
url = f'https://nb.lianjia.com/ershoufang/pg{page}/' # 构造页面网址
page_data = scrape_page(url) # 爬取单个页面的数据
all_data.extend(page_data) # 将单个页面的数据添加到所有数据列表中
with open('house_info.csv', 'w', newline='', encoding='utf-8') as csvfile: # 打开CSV文件进行写操作
fieldnames = ['总价', '单价', '小区名称', '所在区域', '房型', '朝向', '楼层', '面积', '用途'] # 定义CSV文件的字段名
writer = csv.DictWriter(csvfile, fieldnames=fieldnames) # 创建CSV写操作的DictWriter对象
writer.writeheader() # 写入CSV文件的字段名
for house in all_data: # 遍历所有房屋的详细信息
writer.writerow(house) # 将单个房屋的详细信息写入CSV文件中
end_time = time.time() # 记录结束时间
print(f'爬取所有数据所需时间: {end_time - start_time} 秒') # 打印爬取所有数据所需的时间
# 调用主函数开始爬取
scrape_lianjia()
然后问题就是我不会处理这些数据,如何将这些数据可视化出来,
可视化要求就是
分析各列数据,并对各列数据进行处理,转变成合适的数据列。
利用直方图、柱状图、箱型图等三种图形分析对比展示宁波全市及各区的房屋总价、单价、建筑面积的分布情况。
利用合适图形分析对比宁波市各区的房屋总价、单价、建筑面积的平均值。
利用合适图形分析对比宁波各区房屋的室、厅、厨、卫数量的分布情况。
利用合适图形分析对比宁波各区房屋的梯、户数量的分布情况。
利用合适图形分析对比宁波市各区的户型结构、建筑结构、装修情况的占比数据。
利用合适图形分析对比宁波市各区楼层高度(总层数)的分布情况。
利用合适图形分析所在楼层与房屋单价的关系。
把【挂牌时间】减去【上次交易】作为房子的年龄,用合适图形分析房子年龄与房屋总价和单价的关系。
去除空值超过30%的列,将剩下的空值用该列的平均值替换或者用其他你认为合适的值进行替换。
小问题有点多求麻烦一下,数据图尽量清晰明了一点,我用GPT生成的全是乱码图根本看不清