Python获取某品牌加盟数据采集实现可视化数据分析

news/2024/12/5 4:41:57/

前言

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章

开发环境 :

  • python 3.8 运行代码

  • pycharm 2022.3 辅助敲代码

  • jupyter 数据分析使用软件

模块使用 :

  • requests 数据请求模块 需要安装

  • parsel 数据解析模块

  • csv

  • pandas

  • pyecharts

第三方模块安装:

win + R 输入cmd 输入安装命令 pip install 模块名

(如果你觉得安装速度比较慢, 你可以切换国内镜像源)

完整源码、教程 点击此处跳转文末名片获取 ,我都放在这里了。

实现本案例基本步骤:

  1. 明确需求:

    • 明确采集网址以及数据内容

      网址:

      数据: 每一个品牌基本信息

    I. 抓包分析, 数据是请求那个链接可以得到

    • 开发者工具进行抓包 --> F12 / FN+F12 / 鼠标右键点击检测选择network

    • 刷新网页

    • 搜索数据

    II. 如何才能获取多个数据

    对于单个数据包链接地址, 进行比较, 查看规律

    brandId --> 品牌ID变化

    能不能在某一个数据包当中, 找到所有品牌ID --> 列表页面抓包

代码实现步骤:

  1. 发送请求, 对于 品牌ID的数据包发送请求

  2. 获取数据, 获取服务器返回响应数据

  3. 解析数据, 提取我们需要的内容 ==> 品牌ID

  4. 发送请求, 请求数据详情页

  5. 获取数据, 获取服务器返回响应数据

  6. 解析数据, 提取我们需要的内容 ==> 品牌基本信息

  7. 保存数据, 把数据保存到表格文件

数据采集

导入模块

import requests
import parsel
import csv

写入表格

f = open('品牌.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['品牌','公司','业态类别','拓展状态','创立时间','人均消费/客单价','开店方式','合作期限','面积要求','已进购物中心','详情页',
])
csv_writer.writeheader()

模拟浏览器 <请求头伪装>

headers = {# User-Agent 用户代理 表示浏览器基本身份信息# 源码、解答、教程+V:qian97378获取'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'
}

多页采集

for page in range(1, 11):print(f'---正在采集第{page}的数据内容---')

请求链接

    url = 'http://******/wsapi/brand/list3_4'# 提交表单data = {"isHaveLink": "","isTuozhan": "","isXxPp": "","kdfs": "","key": "","orderBy": "1","pageNum": page,"pageSize": 60,"pid": "","qy_p": "","qy_r": "","xqMj": "","ytlb1": "","ytlb2": ""}

发送请求

    response = requests.post(url, json=data, headers=headers)json_data = response.json()for index in json_data['data']['list']:link = f'http://*******/brandDetail?brandId={index["brandId"]}'html_data = requests.get(link, headers=headers).textselector = parsel.Selector(html_data)源码、解答、教程+V:qian97378获取title = selector.css('h1.detail-one-tit::text').get().strip()  # 品牌company = selector.css('p.detail-company::text').get()  # 公司info = selector.css('div.detail-three-tit::text').getall()value = selector.css('span.detail-option-value::text').getall()dit = {'品牌': title,'公司': company,'业态类别': info[0],'拓展状态': info[1],'创立时间': value[0],'人均消费/客单价': value[1].strip(),'开店方式': value[2],'合作期限': value[3],'面积要求': value[4],'已进购物中心': value[5],'详情页': link,}# 写入数据csv_writer.writerow(dit)print(dit)

括展小知识

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

    strip() 去除左右两端的空格

    h1.detail-one-tit 定义类名为 detail-one-tit 的h1标签 text 获取标签文本数据

数据可视化

import pandas as pd
df = pd.read_csv('data.csv')
df.head()

df['已进购物中心'] = df['已进购物中心'].astype(str).str.replace('家', '').str.replace('--', '0').astype(int)
df['人均消费'] = df['人均消费/客单价'].astype(str).str.replace('--', '0').str.split('-').str.get(0).astype(int)
top10 = df[['品牌', '已进购物中心', '人均消费']].sort_values('已进购物中心', ascending=False)[:10]
ShopList = list(top10['品牌'])
counts = list(top10['已进购物中心'])
price = list(top10['人均消费'])
print(ShopList)
print(counts)
print(price)
from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(ShopList).add_yaxis("已进购物中心", counts)源码、解答、教程+V:qian97378获取.add_yaxis("人均消费", price).set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),title_opts=opts.TitleOpts(title="加盟品牌Top10", subtitle="已进购物中心"),)
)
c.render_notebook()

df.head()

top10 = df[['品牌', '人均消费']].sort_values('人均消费', ascending=False)[:10]
ShopList = list(top10['品牌'])
price = list(top10['人均消费'])
from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(ShopList).add_yaxis("人均消费", price).set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),title_opts=opts.TitleOpts(title="加盟品牌Top10", subtitle="人均消费"),)
)
c.render_notebook()

df['面积要求'] = df['面积要求'].astype(str).str.replace('--', '0').str.split('-').str.get(0).astype(int)
源码、解答、教程+V:qian97378获取
top10 = df[['品牌', '面积要求']].sort_values('面积要求', ascending=False)[:10]
ShopList = list(top10['品牌'])
area = list(top10['面积要求'])
from pyecharts import options as opts
from pyecharts.charts import Barc = (Bar().add_xaxis(ShopList).add_yaxis("面积要求", area).set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),title_opts=opts.TitleOpts(title="加盟品牌Top10", subtitle="面积要求"),)
)
c.render_notebook()

import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.faker import Fakerc = (Line().add_xaxis(ShopList).add_yaxis("面积要求", area, is_connect_nones=True).set_global_opts(title_opts=opts.TitleOpts(title="加盟品牌Top10-面积"))
#     .render("line_connect_null.html")
)
c.render_notebook()

尾语 💝

好了,今天的分享就差不多到这里了!

完整代码、更多资源、疑惑解答直接点击下方名片自取即可。

对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

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


http://www.ppmy.cn/news/717529.html

相关文章

idea 调节背景护眼_idea修改背景颜色|护眼色|项目栏背景修改

れい&#xff1a;先上效果图 いち&#xff1a;编辑栏背景颜色修改 路径在&#xff1a;Settings/Editor/Color Scheme/General/Text 下。 个人比较喜欢这个颜色&#xff0c;看着很舒服 #DBEBC2 に&#xff1a;Gutter栏背景修改 修改路径在&#xff1a;Settings/Editor/Color S…

idea 调节背景护眼_IDEA 护眼色设置 背景行颜色取消等设置

首先做一些简答的记录&#xff0c;护眼色 等等的设置很久以前机器上已经设置过了&#xff0c;今天偶尔要在其他机器上重新做一些设置反而忘记了很多步骤&#xff0c; 设置后的HTML页面如何所示&#xff1a; 默认情况下&#xff0c;当只是设置General通用的颜色为护眼色时&#…

mysql护眼参数,VS2013设置护眼背景颜色

VS2013设置护眼背景颜色 打开VS2013 —> 工具 —> 选项 —> 环境 —> 字体和颜色 —> 纯文本(显示项中) —> 项目背景 —> 自定义—> 色调位85、饱和度123、亮度205&#xff0c;保存即可。测试了一下VS2010同样试用&#xff0c;估计其他版本的也都是一…

Linux 6.5增加对高通开源GPU Adreno 690的支持

导读即将推出的Linux 6.5内核将把对高通Adreno 690 GPU的支持添加到开源的MSM内核图形/显示驱动程序中。A690主要用于骁龙8cx第三代&#xff08;SC8280XP&#xff09;平台&#xff0c;而联想ThinkPad X13s笔记本电脑和其他硬件也采用了该平台。 新的支持将包含近200行代码&…

日常玄幻-iPhone手机不自动连接wifi

最近经常发生一些不可思议的事情&#xff0c;我觉得有必要把发生在我身上的那些玄幻的事情告诉大家&#xff0c;要么让大家乐呵一些&#xff0c;要么帮助大家解决一下&#xff0c;这些奇奇怪怪乱七八糟的事情。 言归正传&#xff0c;这第一篇拿谁开刀呢&#xff1f;有了&#x…

【Java语法小记】求字符串中某个字符的数量——IntStream流的使用

文章目录 引入需求代码原理解读s.chars()IntStream filter​(IntPredicate predicate)long count()补充&#xff1a;IntStream peek​(IntConsumer action) 流操作和管道 引入需求 从一段代码引入 return s.length() - (int) s.chars().filter(c -> c S).count(); 其中 (…

自动控制原理——期末题型总结

目录 二阶系统指标计算 劳斯表判断系统稳定 根轨迹绘制 绘制伯德图求相位裕量 二阶系统指标计算 已知单位负反馈系统开环传递函数 Wk(s) 求 1.最大超调量%&#xff0c;调节时间(95%) 2.r(t) 为单位阶跃求稳态误差 &#xff0c; 并求位置误差系数 3.判定其阻尼状态 1)解…

ios手机怎么连接adb命令_iPhone手机内怎么进行ping测试 iPhone6s实现ping命令功能图文教程...

Ping命令是一个非常好的网络故障诊断工具,对于一些网络维护人员来说,通常都会在电脑中借助ping命令查看网络连接情况。现在问题来了,有朋友问:iPhone手机可以进行ping测试吗?答案是肯定的,今天脚本之家小编就来教大家iPhone怎么ping测试,教大家如何使用手机检测网络是否…