From f1784e47c3ee8a56596e4e0d0f4844ebc6933aa1 Mon Sep 17 00:00:00 2001 From: limi <1@qq.com> Date: Mon, 27 May 2024 16:21:13 +0800 Subject: [PATCH] init --- IMG_0818.PNG | Bin 42636 -> 0 bytes README.md | 2 - new_house.py | 84 ------------------------------------- new_house_clean.py | 43 ------------------- new_house_visualization.py | 49 ---------------------- ui.py | 65 ---------------------------- 6 files changed, 243 deletions(-) delete mode 100644 IMG_0818.PNG delete mode 100644 README.md delete mode 100644 new_house.py delete mode 100644 new_house_clean.py delete mode 100644 new_house_visualization.py delete mode 100644 ui.py diff --git a/IMG_0818.PNG b/IMG_0818.PNG deleted file mode 100644 index aeb0c3de1cc905776801f5c376a3a193633142bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42636 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 WKFCTR^)Y7vE<;_j+f_QQasLC3XC*EG diff --git a/README.md b/README.md deleted file mode 100644 index 35ab420..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# zz01 - diff --git a/new_house.py b/new_house.py deleted file mode 100644 index fce6692..0000000 --- a/new_house.py +++ /dev/null @@ -1,84 +0,0 @@ -# _*_ coding:utf-8 _*_ -import urllib.request -import random -from tqdm import tqdm -from time import sleep -import urllib -from bs4 import BeautifulSoup -import re -import pandas as pd -import os -'''爬取新房数据存入excel''' -# 数据请求构建 -def data_request(url): - user_agents = list({ - 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60', - 'Opera/8.0 (Windows NT 5.1; U; en)', - 'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50', - 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50', - 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0'}) - - headers = { - 'Cookie': "otherid=a17973d936f83e36a1dce147d5401dbc; fang_hao123_layed=1; csrfToken=lcekq8-1Dcmxvkk8JatNlzZr; global_cookie=9t8q5c1pfexde98sri1xy12113pluq89t5t; g_sourcepage=xf_lp%5Elb_pc'; unique_cookie=U_9t8q5c1pfexde98sri1xy12113pluq89t5t*11", - 'User-Agent': str(random.choice(user_agents)), - 'Connection': 'keep-alive', - - } - req = urllib.request.Request(url, headers=headers) - resp = urllib.request.urlopen(req) - content = resp.read().decode('utf-8') - return content -# 数据解析 -def data_analysis(content): - html = content - soup = BeautifulSoup(content, 'html.parser') - return soup - - -# 数据存储 -def data_storage(soup): - one_page_data = [] - item_list = soup.select('#newhouse_loupan_list>ul>li') - for i in item_list: - # {'名称': None, '户型': None, '面积': None, '地址': None, '价格'} - item = {} - item['名称'] = i.select('.nlcd_name a')[0].text.strip() - n = len(''.join(i.select('.house_type')[0].text.split()).split('—')) - if n == 0: - item['户型'], item['面积'] = '', '' - elif n == 1: - item['户型'] = ''.join(i.select('.house_type')[0].text.split()).split('—')[0] - item['面积'] = '' - else: - item['户型'], item['面积'] = ''.join(i.select('.house_type')[0].text.split()).split('—') - item['面积']=item['面积'].replace('平米','') - item['行政区'] = i.select('.address span.sngrey') - if len(item['行政区'])==0: - item['行政区'] ='' - else: - item['行政区'] =item['行政区'][0].text.replace('[','').replace(']','') - item['价格(元/㎡)'] = ''.join(re.findall(r'\d', i.select('.nhouse_price')[0].text)) - one_page_data.append(item) - return one_page_data - - -# 保存文件 -def data_files(all_page_data,save_path): - df = pd.DataFrame(all_page_data) - df.to_excel(save_path) - -# 主函数 -if __name__ == '__main__': - new_all_data=[] - page=25 - for i in tqdm(range(1,page+1)): - sleep(1) - url=f'https://cs.newhouse.fang.com/house/s/b9{i}/' - content=data_request(url) - soup = data_analysis(content) - one_page_data = data_storage(soup) - new_all_data.extend(one_page_data) - data_files(new_all_data, './房天下新房数据.xlsx') - # 打开文件 - os.startfile(r"房天下新房数据.xlsx") - diff --git a/new_house_clean.py b/new_house_clean.py deleted file mode 100644 index dfb46d0..0000000 --- a/new_house_clean.py +++ /dev/null @@ -1,43 +0,0 @@ -'''清洗房天下新房数据''' -import os -import pandas as pd -# 读取数据 -df1 = pd.read_excel(r'./房天下新房数据.xlsx', index_col=0) -# 清洗行政区\t\n -df1['行政区'] = df1['行政区'].str.replace('\t', '').str.replace('\n', '') - -# 处理户型字段 -df2 = df1.dropna(subset=['户型']) -# 索引:户型list -hxdict = dict(df2['户型'].str.split('/')) -for i, vlist in hxdict.items(): - for v in vlist: - df1.loc[i, v] = '有' -col_list = df1.columns.tolist()[5:] -for col in col_list: - df1.loc[df1[col].isna(), col] = '无' -# 处理面积字段 -df3 = df1.dropna(subset=['面积']) -# 索引:面积list -mjlist = dict(df3['面积'].str.split('~')) -for i, vlist in mjlist.items(): - # 只有一个数据,最大最小面积一样 - if len(vlist) == 1: - df1.loc[i, '最小面积(㎡)'] = vlist[0] - df1.loc[i, '最大面积(㎡)'] = vlist[0] - else: - df1.loc[i, '最小面积(㎡)'] = vlist[0] - df1.loc[i, '最大面积(㎡)'] = vlist[1] - - -# 重排columns顺序 -df4 = df1.loc[:, ['名称', '一居', '二居', '三居', '四居', '五居', '五居以上', '最小面积(㎡)', '最大面积(㎡)', '行政区', '价格(元/㎡)']] -# 清除存在空值的行 -df4=df4.dropna() -# 重排索引 -df4= df4.reset_index(drop=True) - -# # 存入清洗后的数据 -df4.to_excel(r'./房天下新房数据(清洗后).xlsx') -# 打开文件 -os.startfile(r"房天下新房数据(清洗后).xlsx") \ No newline at end of file diff --git a/new_house_visualization.py b/new_house_visualization.py deleted file mode 100644 index aeac561..0000000 --- a/new_house_visualization.py +++ /dev/null @@ -1,49 +0,0 @@ -#导包 -import pandas as pd -import matplotlib.pyplot as plt -# 正确显示 -plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 -plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 -df=pd.read_excel('./房天下新房数据(清洗后).xlsx',index_col=0) -df1=df.dropna(subset=['行政区','价格(元/㎡)']) -# 根据行政区分组取平均 -df1=df.groupby('行政区').mean(numeric_only=True) - -# 行政区平均新房单价分析 -plt.title('行政区平均新房单价分析') -df1['价格(元/㎡)'].plot.bar(color='#CCCCFF') -plt.ylabel('价格(元/㎡)') -for i,v in enumerate(df1['价格(元/㎡)']): - plt.text(i-0.35,v+300,round(v)) -plt.xticks(rotation=60) -''' -岳麓区的平均新房单价是最高的,浏阳的平均新房单价是最低的 -''' -plt.savefig('./新房数据展示1.jpg') - -# 新房户型占比分析 -plt.figure(figsize=(10,10)) -plt.title('新房户型占比分析') -df2=df -df2[df2['一居']=='有'].count() -a1=df2.一居.value_counts()['有'] -a2=df2.二居.value_counts()['有'] -a3=df2.三居.value_counts()['有'] -a4=df2.四居.value_counts()['有'] -a5=df2.五居.value_counts()['有'] -colors=['#FFECE5','#E5CCFF','#CCCCFF','#CCFFE5','#FFE5CC'] -plt.pie([a1,a2,a3,a4,a5],autopct='%.1f%%',colors=colors,labels=['一居','二居','三居','四居','五居']) -plt.legend() -plt.ylabel('') -plt.savefig('./新房数据展示2.jpg') - -# 新房数量占比分析 -plt.figure(figsize=(10,10)) -df2=df.dropna(subset=['行政区']) -df2=df.groupby('行政区').count() -plt.title('新房数量占比分析') -colors=['#FFECE5','#E5CCFF','#CCCCFF','#CCFFE5','#FFE5CC','#e6e6fa','#9cc3eb','#d0eb9b',"#e6cfe6","#d1fff8"] -df2['名称'].plot.pie(autopct='%.1f%%',colors=colors) -plt.legend() -plt.ylabel('') -plt.savefig('./新房数据展示3.jpg') diff --git a/ui.py b/ui.py deleted file mode 100644 index f1b2492..0000000 --- a/ui.py +++ /dev/null @@ -1,65 +0,0 @@ -import tkinter as tk -import os -from tkinter import messagebox -import ttkbootstrap as ttk - -#执行new_house.py -def open_new_house(): - os.system('new_house.py') -# 执行new_house_clean.py -def open_new_house_clean(): - os.system('new_house_clean.py') -# 执行new_house_visualization.py -def open_new_house_visualization(): - os.system('new_house_visualization.py') - messagebox.showinfo('提醒', '可视化完成!可以点击主页面下面按钮查看图像') -def open_analyse_1(): - os.startfile(f"新房数据展示1.jpg") -def open_analyse_2(): - os.startfile(f"新房数据展示2.jpg") -def open_analyse_3(): - os.startfile(f"新房数据展示3.jpg") - -# 窗口对象+美化 -window = ttk.Window() -style = ttk.Style("minty") -window.geometry("500x350+400+250") -window.title("房天下长沙新房爬取") -# 图片 -canvas = tk.Canvas(window, height=150, width=500) -image_file = tk.PhotoImage(file=r"./IMG_0818.PNG") -image = canvas.create_image(50,20, anchor='nw', image=image_file) -canvas.pack(side='top') - -# 开始爬虫 -b1=tk.Button(window) -b1['text']="1.开始爬虫" -b1['command']=open_new_house -b1.place(x=110, y=150) -# 清洗数据 -b2=tk.Button(window) -b2['text']="2.清洗数据" -b2['command']=open_new_house_clean -b2.place(x=210, y=150) -# 可视化 -b3=tk.Button(window) -b3['text']="3.开始可视化" -b3['command']=open_new_house_visualization -b3.place(x=310, y=150) - -b4=tk.Button(window) -b4['text']="3.1查看行政区平均新房单价分析图像" -b4['command']=open_analyse_1 -b4.place(x=130, y=190) - -b5=tk.Button(window) -b5['text']="3.2查看新房户型占比分析图像" -b5['command']=open_analyse_2 -b5.place(x=130, y=230) - -b6=tk.Button(window) -b6['text']="3.3查看新房数量占比分析图像" -b6['command']=open_analyse_3 -b6.place(x=130, y=270) -# 进入消息循环 -window.mainloop() \ No newline at end of file