Python采集二手房源数据信息并做可视化展示

目录标题

      • 前言
      • 环境使用:
      • 模块使用:
      • python技术实现: <基本流程步骤>
      • 代码展示
      • 尾语

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

环境使用:

  • Python 3.8

  • jupyter --> pip install jupyter notebook

  • pycharm 也可以

模块使用:

  • requests >>> pip install requests 数据请求模块

  • parsel >>> pip install parsel 数据解析模块

  • csv 内置模块

第三方模块安装:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

  2. 在pycharm中点击Terminal(终端) 输入安装命令

如果出现爆红, 可能是因为 网络连接超时, 可切换国内镜像源,命令如下:

pip install -i https://pypi.doubanio.com/simple/ requests

python资料、源码、教程\福利皆: 点击此处跳转文末名片获取

python技术实现: <基本流程步骤>

  1. 发送请求, 模拟浏览器对于url地址发送请求

    请求链接地址: https://cs.****.com/ershoufang/

  2. 获取数据, 获取响应数据

    获取数据: 网页源代码 <整个网页数据内容>

  3. 解析数据, 提取我们需要数据

    提取数据: 房源基本信息

  4. 保存数据, 把数据保存本地文件

    保存数据: csv表格文件当中

  5. 多页数据采集

代码展示

获取数据:

# 导入csv模块
import csv# 创建文件
f = open('data.csv', mode='w', encoding='utf-8', newline='')
# 添加字段名
csv_writer = csv.DictWriter(f, fieldnames=['标题','小区','区域','总价','单价','户型','面积','朝向','装修','楼层','年份','建筑结构','详情页'
])
# 写表头
csv_writer.writeheader()
# 导入数据解析模块 第三方模块, 需要安装
import parsel
# 导入数据请求模块 第三方模块 需要安装 pip install requests
import requests
for page in range(1, 101):# 请求链接url = f'https://cs.lianjia.com/ershoufang/pg{page}/'# 伪装浏览器 --> headers 请求头headers = {# User-Agent 用户代理 表示浏览器基本身份信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'}# 发送请求response = requests.get(url, headers=headers)html_data = response.text # <Response [200]> 响应对象 表示请求成功# 把获取下来 html字符串数据内容 <html_data>, 转成可解析对象selector = parsel.Selector(html_data)"""selector  <Selector xpath=None data='<html class=""><head><meta http-equiv...'> 选择器对象selector.css() 根据标签属性提取数据内容selector.xpath()"""# 提取所有li标签里面房源信息 --> 返回列表, 列表里面元素是选择器对象lis = selector.css('.sellListContent li .info')# for循环遍历, 提取出来, 然后也可以使用css语法或者xpath语法 提取具体数据内容for li in lis:"""get() 获取第一个标签数据内容 <返回字符串>getall() 获取所有标签数据内容 <返回列表>strip() 去除字符串左右两端空格replace('元/平', '') 字符串替换, 把字符串当中 元/平 替换成 '' --> 相当于删除split(' | ') 字符串分割犯法, 把字符串以  |  作为切割, 分割成列表"""title = li.css('.title a::text').get() # 标题info = li.css('.positionInfo a::text').getall()area = info[0].strip() # 列表第一个元素 小区area_1 = info[1] # 区域totalPrice = li.css('.totalPrice span::text').get() # 总价unitPrice = li.css('.unitPrice span::text').get().replace('元/平', '')  # 单价houseInfo = li.css('.houseInfo::text').get().split(' | ')"""有年份, 列表元素就是7个, 没有年份列表元素6个"""house_type = houseInfo[0] # 户型house_area = houseInfo[1] # 面积face = houseInfo[2] # 朝向house = houseInfo[3] # 装修fool = houseInfo[4] # 楼层if len(houseInfo) == 7:date = houseInfo[5] # 年份house_1 = houseInfo[6] # 建筑结构elif len(houseInfo) == 6:date = '未知'house_1 = houseInfo[-1] # 建筑结构href = li.css('.title a::attr(href)').get() # 详情页# 保存字典里面dit = {'标题': title,'小区': area,'区域': area_1,'总价': totalPrice,'单价': unitPrice,'户型': house_type,'面积': house_area,'朝向': face,'装修': house,'楼层': fool,'年份': date,'建筑结构': house_1,'详情页': href,}
#         csv_writer.writerow(dit)
#         print(dit)#     print(title, area, area_1, totalPrice, unitPrice, house_type, house_area, face, house, fool, date, house_1, sep='|')

数据可视化:

import pandas as pd
# 读取数据
df = pd.read_csv('data.csv')
df.head()

house_type_num = df['户型'].value_counts().to_list()
house_type = df['户型'].value_counts().index.to_list()
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
c = (Pie().add("", [list(z) for z in zip(house_type, house_type_num)]).set_global_opts(title_opts=opts.TitleOpts(title="二手房源户型")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
c.load_javascript()
c.render_notebook()
house_num = df['装修'].value_counts().to_list()
house_type_1 = df['装修'].value_counts().index.to_list()
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
c = (Pie().add("", [list(z) for z in zip(house_type_1, house_num)]).set_global_opts(title_opts=opts.TitleOpts(title="二手房源装修占比分布")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
c.render_notebook()
date_num = df['年份'].value_counts().to_list()
date_type = df['年份'].value_counts().index.to_list()
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
c = (Pie().add("", [list(z) for z in zip(date_type, date_num)]).set_global_opts(title_opts=opts.TitleOpts(title="二手房源年份占比分布")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
c.render_notebook()
df.head()

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4099.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QT】图形化页面设计

可视化的图形化界面共有三种设计方式&#xff0c;一种是通过可视化来设计界面的方式&#xff1b;一种是代码化的设计方式&#xff1b;最后是混合上面两种的混合界面设计方式。目前我们只考虑通过Designer和代码来设计图形化页面的两种方式。 目录 可视化图形界面设计 图形页…

【Flutter】如何在 Flutter 中获取设备 ID

文章目录 一、 前言二、 设备 ID 的重要性1. 什么是设备 ID2. 设备 ID 的作用 三、 在 Flutter 中获取设备 ID1. 需要的工具和库2. 简单代码示例3. 完整可以运行的代码 四、 注意事项1. 权限问题2. 设备兼容性问题 五、 总结 一、 前言 在移动应用开发中&#xff0c;有时我们需…

Unity之穿山甲SDK

SDK版本相关问题官网解答记录: 官网咨询工单地址记录&#xff1a; https://www.csjplatform.com/athena/user-feedback/order/list?identify_keycb790ca553ed7253d29a4dbd4041281b62c449f55d6faaeb4e744370c9b34e38&init_id652798&order_id652798

初学mybatis(六)动态sql

学习回顾&#xff1a;初学mybatis&#xff08;五&#xff09; 一、动态SQL 介绍 什么是动态SQL&#xff1a;动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 官网描述&#xff1a; MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验&…

HOT32-复制带随机指针的链表

leetcode原题链接&#xff1a;复制带随机指针的链表 题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xf…

【git】idea怎么去替换git的地址

git 打开git地址添加或者修改git地址 打开git地址 右击->git->repository->remotes 添加或者修改git地址

FDM3D打印系列——5、上色和灯光

3D打印扎古头可动并加灯 大家好&#xff0c;我是阿赵&#xff0c;这次通过一个实际操作的例子&#xff0c;来聊一下3D打印模型添加效果。这里主要讲2个方面&#xff0c;一个是上色&#xff0c;另一个是加灯光 一、上色 这个扎古头模型就是这次的主角。 1、打磨 可以看到&…

Cooike Session

1 会话技术 1.1 会话管理概述 1.1.1 什么是会话 这里的会话&#xff0c;指的是web开发中的一次通话过程&#xff0c;当打开浏览器&#xff0c;访问网站地址后&#xff0c;会话开始&#xff0c;当关闭浏览器&#xff08;或者到了过期时间&#xff09;&#xff0c;会话结束。 …

【算法】行星碰撞机器人碰撞(栈的使用)

文章目录 行星碰撞机器人碰撞补充题目&#xff1a;2731. 移动机器人 参考资料 本文记录了两个使用栈来处理碰撞问题的算法题目。 行星碰撞 https://leetcode.cn/problems/asteroid-collision/ 对于这种题目&#xff0c;各个元素分别会向左或向右移动&#xff0c;可以使用栈…

无迹卡尔曼滤波在目标跟踪中的作用(二)

在上一节的内容中&#xff0c;我们介绍了UKF中最重要的内容—无迹变换UT&#xff0c;今天我们将具体介绍UKF是如何实现的。 好了&#xff0c;话不多说&#xff0c;开整&#xff01;&#xff01;&#xff01; UKF算法的实现 我们知道&#xff0c;我们可以使用状态方程和观测方…

kotlin constructor init companion object 与初始化by lazy

kotlin constructor init companion object 与初始化by lazy class MyDemo(private var v: Int) {init {println("init $v")}constructor(m: Int, n: Int) : this(m) {println("constructor $m $n")}//只初始化一次companion object {private var TAG &qu…

死信是什么,如何运用RabbitMQ的死信机制?

系列文章目录 手把手教你&#xff0c;本地RabbitMQ服务搭建&#xff08;windows&#xff09; 消息队列选型——为什么选择RabbitMQ RabbitMQ 五种消息模型 RabbitMQ 能保证消息可靠性吗 推或拉&#xff1f; RabbitMQ 消费模式该如何选择 死信是什么&#xff0c;如何运用Rabbit…