表弟准备买房,让我帮他分析分析哪个小区最合适,我直接用python下载了本地所有房源信息做成了可视化图(1)

本文介绍了如何使用Python3.8和相关库如requests、parsel抓取和解析网页数据,以获取和分析二手房源信息。步骤包括发送请求、获取和解析数据、保存数据,并利用数据分析工具生成可视化图表。
摘要由CSDN通过智能技术生成

这谁顶得住啊😳

算了我们还是回到文章吧 ~

📢准备工作

================================================================

软件

python 3.8 解释器

pycharm 专业版2021.2

不会安装的可以看我零基础系列都有讲

使用的模块及安装

requests >>> pip install requests 数据请求 (用python代码 模拟浏览器对于服务器发送请求)

parsel >>> pip install parsel 数据解析 (提取我们想要数据内容) parsel 对于你们以后学习scrapy(核心组件之一)有帮助

csv 内置模块 不需要安装 获取到的数据内容保存到csv表格数据

win+r 输入cmd,输入安装命令 pip install 加上模块名

爬虫通用流程思路

1.明确需求(抓取内容: 视频数据/音频数据/图片)

2.发送请求: 对应分析得到url

3.获取数据: response.text[文本数据 网页源代码] response.json()[json字典数据] response.content(二进制数据)

4.解析数据(提取我们想要数据内容) 解析方式: css xpath re

5.保存数据(保存csv表格) 视频/图片/音频/文字…文件 本地 数据库

数据来源分析

爬虫: 对于网页上面的数据内容进行采集程序

  1. 确定爬取的内容是什么东西?

二手房源的基本数据

  1. 通过开发者工具进行抓包分析, 分析这些数据内容是可以哪里获取

通过开发者工具, 分析可得 >>> 我们想要的房源数据内容(房源详情页url) 就是来自于 网页源代码

如果你要爬取多个房源数据, 只需要在列表页面 获取所有的房源详情页url

代码实现步骤:

发送请求 >>> 获取数据 >>> 解析数据 >>> 保存数据

  1. 发送请求, 是对于房源列表页发送请求 https://cs.***.com/ershoufang/

  2. 获取数据, 获取网页源代码 response.text

  3. 解析数据, 提取我们想要的内容, 房源详情页url

  4. 发送请求, 对于房源详情页url地址发送请求

  5. 获取数据, 获取网页源代码 response.text

  6. 解析数据, 提取房源基本信息 售价 标题 单价 面积 户型…

  7. 保存数据

  8. 多页数据采集

📢爬虫代码

================================================================

代码部分

import pprint # 格式化输出模块 内置模块

import requests # 数据请求模块 第三方模块

import parsel # 数据解析模块 第三方模块

import csv # csv模块 内置模块 不需要安装

f = open(‘房源.csv’, mode=‘a’, encoding=‘utf-8’, newline=‘’)

csv_writer = csv.DictWriter(f, fieldnames=[

‘上次交易’,

‘交易权属’,

‘产权所属’,

‘单价’,

‘售价’,

‘套内面积’,

‘建筑类型’,

‘建筑结构’,

‘建筑面积’,

‘户型结构’,

‘房屋年限’,

‘房屋户型’,

‘房屋朝向’,

‘房屋用途’,

‘房本备件’,

‘房源核验码’,

‘所在楼层’,

‘抵押信息’,

‘挂牌时间’,

‘标题’,

‘梯户比例’,

‘装修情况’,

‘详情页’,

‘配备电梯’,

])

csv_writer.writeheader() # 写入表头

for page in range(1, 11):

print(f’=正在爬取第{page}页数据内容=')

1. 发送请求

url = f’https://cs.****.com/ershoufang/pg{page}/’ # 确定请求的url地址

模拟浏览器发送请求 需要对于python代码进行伪装

headers:请求头 字典数据类型 键值对形式

header作用: 伪装

加那些参数: cookie User-Agent(UA) referer host

参数意思是什么

cookie: 用户信息, 常用于检测是否登陆账号

User-Agent: 浏览器基本身份标识(用户代理)

referer: 防盗链 告诉服务器我们发送请求的url地址是从哪里跳转过来 (动态网页)

host: 域名

headers = {

‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36’

}

response = requests.get(url=url, headers=headers)

2. 获取数据, 获取网页源代码 response.text

print(response.text) # 返回数据字符串数据类型

3. 解析数据 解析方式: css xpath re

css选择器: 根据标签属性内容提取数据

selector = parsel.Selector(response.text) # 返回对象

attr 属性选择器 getall() 获取所有 返回数据列表 人家语法就是这样 a::attr(href) 取a标签里面href属性

href = selector.css(‘.sellListContent li .title a::attr(href)’).getall()

print(href)

列表 数据容器(一个箱子) ‘https://cs.****.com/ershoufang/104107916240.html’ 元素(箱子里面东西)

for 循环 遍历就是从这个箱子里面一个一个拿东西出来

for link in href:

4. 发送请求, 对于房源详情页url地址发送请求

5.获取数据, 获取网页源代码response.text

response_1 = requests.get(url=link, headers=headers)

6. 解析数据提取我们想要数据

print(response_1.text)

selector_1 = parsel.Selector(response_1.text) # 返回对象

get() 取一个

title = selector_1.css(‘.title .main::text’).get() # 标题

price = selector_1.css(‘.price .total::text’).get() # 售价

price_1 = selector_1.css(‘.unitPriceValue::text’).get() # 单价

attr_list = selector_1.css(‘.base .content li .label::text’).getall()

attr_list_1 = selector_1.css(‘.transaction .content li .label::text’).getall()

content_list = selector_1.css(‘.base .content li::text’).getall()

content_list_1 = selector_1.css(‘.transaction .content li span::text’).getall()

两个列表 如何创建成一个字典 attr_list 做键 content_list 做值

print(attr_list)

print(content_list)

保存csv文件表格

需要创建一个字典

dit = {

“详情页”: link,

“标题”: title,

“售价”: price,

“单价”: price_1,

“区域”: price_1,

}

dit_1 = dict(zip(attr_list, content_list))

dit_2 = dict(zip(attr_list_1, content_list_1))

dit.update(dit_1)

dit.update(dit_2)

print(title, price, price_1)

csv_writer.writerow(dit) # 写入数据

pprint.pprint(dit) # 格式化输出模块

效果展示

部分的数据

在这里插入图片描述

📢数据分析

================================================================

导入模块

import pandas as pd

from pyecharts.charts import Map

from pyecharts.charts import Bar

from pyecharts.charts import Line

from pyecharts.charts import Grid

from pyecharts.charts import Pie

from pyecharts.charts import Scatter

from pyecharts import options as opts

读取数据

df = pd.read_csv(‘data.csv’, encoding = ‘utf-8’)

df.head()

df.describe()

df.isnull().sum()

df[‘电梯’].unique()

df[‘电梯’].fillna(‘未知’, inplace=True)

df.isnull().sum()

df[‘电梯’].unique()

df[‘朝向’].unique()

df[‘朝向’] = df[‘朝向’].str.replace(‘南西’,‘西南’)

df[‘朝向’].unique()

g = df.groupby(‘市区’)

df_region = g.count()[‘小区’]

region = df_region.index.tolist()

count = df_region.values.tolist()

df_region

各城区二手房数量北京市地图

new = [x + ‘区’ for x in region]

m = (

Map()

.add(‘’, [list(z) for z in zip(new, count)], ‘北京’)

.set_global_opts(

title_opts=opts.TitleOpts(title=‘北京市二手房各区分布’),

visualmap_opts=opts.VisualMapOpts(max_=3000),

)

)

m.render_notebook()

df_price = g.mean()[‘价格(万元)’]

df_price

df_price.values.tolist()

price = [round(x,2) for x in df_price.values.tolist()]

bar = (

Bar()

.add_xaxis(region)

.add_yaxis(‘数量’, count,

label_opts=opts.LabelOpts(is_show=True))

.extend_axis(

yaxis=opts.AxisOpts(

name=“价格(万元)”,

type_=“value”,

min_=200,

max_=900,

interval=100,

axislabel_opts=opts.LabelOpts(formatter=“{value}”),

)

)

.set_global_opts(

title_opts=opts.TitleOpts(title=‘各城区二手房数量-平均价格柱状图’),

tooltip_opts=opts.TooltipOpts(

is_show=True, trigger=“axis”, axis_pointer_type=“cross”

),

xaxis_opts=opts.AxisOpts(

type_=“category”,

axispointer_opts=opts.AxisPointerOpts(is_show=True, type_=“shadow”),

),

yaxis_opts=opts.AxisOpts(name=‘数量’,

axistick_opts=opts.AxisTickOpts(is_show=True),

splitline_opts=opts.SplitLineOpts(is_show=False),)

)

)

line2 = (

Line()

.add_xaxis(xaxis_data=region)

.add_yaxis(

series_name=“价格”,

yaxis_index=1,

y_axis=price,

label_opts=opts.LabelOpts(is_show=True),

z=10

)

)

bar.overlap(line2)

grid = Grid()

grid.add(bar, opts.GridOpts(pos_left=“5%”, pos_right=“20%”), is_control_axis_index=True)

grid.render_notebook()

top_price = df.sort_values(by=“价格(万元)”,ascending=False)[:15]

top_price

area0 = top_price[‘小区’].values.tolist()

count = top_price[‘价格(万元)’].values.tolist()

bar = (

Bar()

.add_xaxis(area0)

.add_yaxis(‘数量’, count,category_gap = ‘50%’)

.set_global_opts(

yaxis_opts=opts.AxisOpts(name=‘价格(万元)’),

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

[外链图片转存中…(img-t4OthBMI-1712837994548)]

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)

img
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值