使用python采集某二手房源数据并做数据可视化展示(含完整源代码)
使⽤python采集某⼆⼿房源数据并做数据可视化展⽰(含完整源代码)本次⽬的:
python采集链家⼆⼿房源数据并做数据可视化展⽰
亮点:
1. 系统分析⽹页性质
2. 结构化的数据解析
3. csv数据保存
环境介绍:
python 3.8 解释器
pycharm 专业版2021.2 >>> 激活码 编辑器
模块使⽤:
requests >>> pip install requests
数据请求 (⽤python代码 模拟浏览器对于服务器发送请求)
parsel >>> pip install parsel
数据解析 (提取我们想要数据内容) parse 对于你们以后学习scrapy(核⼼组件之⼀)有帮助
csv
内置模块 不需要安装 获取到的数据内容保存到csv表格数据
win + R 输⼊cmd 输⼊安装命令 pip install 模块名
< (服务器返回响应⽂本数据)
本节课的上课流程思路(爬⾍最基本思路流程:)
1. 明确需求(爬取内容: 视频数据/⾳频数据/图⽚)
2. 发送请求: 对应分析得到url
3. 获取数据: [⽂本数据 ⽹页源代码] response.json()[json字典数据] t(⼆进制数据)协议离婚需要什么手续
4. 解析数据(提取我们想要数据内容) 解析⽅式: css xpath re
5. 保存数据(保存csv表格) 视频/图⽚/⾳频/⽂字…⽂件 本地 数据库
[静态⽹页]
⼀. 数据来源分析
爬⾍: 对于⽹页上⾯的数据内容进⾏采集程序
1. 确定爬取的内容是什么东西?
⼆⼿房源的基本数据
2. 通过开发者⼯具进⾏抓包分析, 分析这些数据内容是可以哪⾥获取
通过开发者⼯具, 分析可得 >>> 我们想要的房源数据内容(房源详情页url) 就是来⾃于 ⽹页源代码
如果你要爬取多个房源数据, 只需要在列表页⾯ 获取所有的房源详情页url
⼆. 代码实现步骤: 发送请求 >>> 获取数据 >>> 解析数据 >>> 保存数据
1. 发送请求, 是对于房源列表页发送请求
2. 获取数据, 获取⽹页源代码
3. 解析数据, 提取我们想要的内容, 房源详情页url
4. 发送请求, 对于房源详情页url地址发送请求
5. 获取数据, 获取⽹页源代码
6. 解析数据, 提取房源基本信息 售价 标题 单价 ⾯积 户型…北京 旅行社
7. 保存数据
8. 多页数据采集
爬取数据代码
导⼊模块import  pprint  # 格式化输出模块 内置模块import  requests  # 数据请求模块 第三⽅模块 pip install requests import  parsel  # 数据解析模块 第三⽅模块 pip install parsel import  csv  # csv 模块 内置模块 不需要安装
1
2
3
4"""68-102: ⽂件创建  69⾏: ⽂件创建 76⾏⽂件配置 102⾏写⼊表头 fieldnames ⾥⾯的数据是字典⾥⾯键"""f = open ('房源.csv', mode ='a', encoding ='utf-8', newline ='')"""如何实现快速替换:    1. 选择需要替换的内容    2. 按 ctrl + R    3. 输⼊正则表达式语法 进⾏替换 第⼀⾏写正则语法(匹配数据) 第⼆⾏写替换的内容    4. 点击全部替换"""
1
2
3
4
5
6
7
8
9
10
11
csv_writer = csv .DictWriter (f , fieldnames =[    '上次交易',    '交易权属',    '产权所属',    '单价',    '售价',    '套内⾯积',    '建筑类型',    '建筑结构',    '建筑⾯积',    '户型结构',    '房屋年限',    '房屋户型',    '房屋朝向',    '房屋⽤途',    '房本备件',    '房源核验码',    '所在楼层',    '抵押信息',    '挂牌时间',    '标题',    '梯户⽐例',    '装修情况',    '详情页',    '配备电梯',])csv_writer .writeheader ()  # 写⼊表头for  page in range (1, 11):    print (f '===================正在爬取第{page}页数据内容===================')1
2
3
4
5
6
7
8
9
10
1112
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29    # 1. 发送请求    url = f '⽹址'  # 确定请求的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 )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15    # 2. 获取数据, 获取⽹页源代码 response .text    # print (response .text ) # 返回数据字符串数据类型
1
2    # 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 )    # 列表 数据容器(⼀个箱⼦) 'cs.lianjia/ershoufang/104107916240.html' 元素(箱⼦⾥⾯东西)    # for  循环 遍历就是从这个箱⼦⾥⾯⼀个⼀个拿东西出来    for  link in href :
1
2
3
4
5
6
7
8
9
# 4. 发送请求, 对于房源详情页url 地址发送请求        # 5.获取数据, 获取⽹页源代码response .text        response_1 = requests .get (url =link , headers =headers )1
2
3        # 6. 解析数据提取我们想要数据        # print ( )        selector_1 = parsel .Selector ( )  # 返回对象        # 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 ) # 格式化输出模块
1
2
3
4
成长的脚印 作文5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
可视化代码#%% md ## 导⼊模块#%%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 #%% md ## 读取数据#%%df = pd .read_csv ('data.csv', encoding = 'utf-8')df .head ()#%%df .describe ()#%%df .isnull ().sum ()1
2
3
4
5
6
7
8
9
10
今日钢材价格11
12
13
14
15
16
17
18
19
20白玫瑰花语是什么意思
21
22
23
24
25
武艺超的意思26
27
28
29
30
31
32

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。