大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
python 3.8 运行代码
pycharm 2022.3 辅助敲代码
jupyter 数据分析使用软件
requests 数据请求模块 需要安装
parsel 数据解析模块
csv
pandas
pyecharts
第三方模块安装:
win + R 输入cmd 输入安装命令 pip install 模块名
(如果你觉得安装速度比较慢, 你可以切换国内镜像源)
完整源码、教程 点击此处跳转文末名片获取 ,我都放在这里了。
明确需求:
明确采集网址以及数据内容
网址:
数据: 每一个品牌基本信息
I. 抓包分析, 数据是请求那个链接可以得到
开发者工具进行抓包 --> F12 / FN+F12 / 鼠标右键点击检测选择network
刷新网页
搜索数据
II. 如何才能获取多个数据
对于单个数据包链接地址, 进行比较, 查看规律
brandId --> 品牌ID变化
能不能在某一个数据包当中, 找到所有品牌ID --> 列表页面抓包
代码实现步骤:
发送请求, 对于 品牌ID的数据包发送请求
获取数据, 获取服务器返回响应数据
解析数据, 提取我们需要的内容 ==> 品牌ID
发送请求, 请求数据详情页
获取数据, 获取服务器返回响应数据
解析数据, 提取我们需要的内容 ==> 品牌基本信息
保存数据, 把数据保存到表格文件
导入模块
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).text
selector = 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)
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 Bar
c = (
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 Bar
c = (
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 Bar
c = (
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 Faker
c = (
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()
好了,今天的分享就差不多到这里了!
完整代码、更多资源、疑惑解答直接点击下方名片自取即可。
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!
最后,宣传一下呀~更多源码、资料、素材、解答、交流皆点击下方名片获取呀