吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2171|回复: 43
收起左侧

[Python 原创] 某球网爬虫+简单可视化数据分析详细步骤

[复制链接]
buluo533 发表于 2024-8-3 18:21
本帖最后由 buluo533 于 2024-8-3 18:59 编辑

这一次做一个全过程的某球网的爬虫+数据可视化,仅供技术交流学习
话不多说,直接开干
准备工作:新建两个py文件,一个用来做爬虫,一个用来做数据分析
爬虫部分,导入requests,pandas,time,fake_useragent模块
[Python] 纯文本查看 复制代码
import requests
import time
import pandas as pd
from fake_useragent import UserAgent

打开某球网,找到数据界面
界面.png
数据嘎嘎多,还有一百多页,这里打开开发者工具,刷新界面进行抓包
数据抓包.png
这里面有很多数据,初学者可以用搜索查找数据,有经验的会选择XHR数据包,通过翻页来抓,都演示一遍
数据搜索.png
三个接口,都去看看,发现只有第一个接口包含一页的数据,选择第一个接口作为爬取对象,兄弟们都可以去看看
接下来就是翻页去抓XHR,可以多翻几页,可以看到里面数据是我们想要的
第二页.png
到了这里我们可以去请求测试一下,简单写一下
[Python] 纯文本查看 复制代码
ua = UserAgent().random
headers = {
    'User-Agent': ua
}
cookie={
    'Cookie': '需要填写自己的cookie'
}
url = 'https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page=1&size=30&order=desc&order_by=percent&market=CN&type=sh_sz'
response = requests.get(url, headers=headers,cookies=cookie).json()
print(response)

cookie获取位置.png
打印一下结果,这样就可以看到我们想要的数据,但是返回的内容没有被清洗,是以json格式返回的数据
接下来研究翻页逻辑,我们要的是他所有的数据,我们需要看的是负载的参数内容
翻页逻辑.png
这样对比想必大家应该看懂了他的翻页逻辑,接下来就是循环和提取需要的数据,我就不赘述了
这里为大家提供将万和亿单位数据转换为纯数据算法还有就是清洗空值,很简单,大家也可以自己去写,方便后续数据分析
[Python] 纯文本查看 复制代码
def str_of_num(num):
    '''
    递归实现,精确为最大单位值 + 小数点后三位
    '''
if num is None:
return 0
    else:
        def strofsize(num, level):
            if level >= 2:
                return num, level
            elif num >= 10000:
                num /= 10000
                level += 1
                return strofsize(num, level)
            else:
                return num, level

        units = ['', '万', '亿']
        num, level = strofsize(num, 0)
        if level > len(units):
            level -= 1
        return '{}{}'.format(round(num, 3), units[level])

[Python] 纯文本查看 复制代码
def clear_None(data):
    if data is None:
        return 0
    else:
        return str(data) + '%'

大致结果如图所示:
数据清洗.png
同时我们要写入csv也需要将数据保存进字典
希望大家爬取数据的时候多加点延时,不要获取太多数据,仅作联系用即可
接下来将字典转为DataFrame格式,写入csv
[Python] 纯文本查看 复制代码
# dic 是字典名
df = pd.DataFrame(dic)
df.to_csv('某球网.csv', index=False)

接下来实现数据分析部分
准备工作:导入panda,pycharts
[Python] 纯文本查看 复制代码
import pandas as pd
from pyecharts.charts import Bar, Page, Line
from pyecharts.globals import ThemeType
from pyecharts import options as opts
from pyecharts.globals import CurrentConfig

主要绘图是柱状图和折线图(不是专业的分析,仅是用来展示效果)
准备数据
[Python] 纯文本查看 复制代码
data = pd.read_csv('某球网.csv', encoding='utf-8')
chunks = []
for i in range(0, len(data), 1000):
    chunks.append(data[i:i + 1000])
datas = pd.concat(chunks)

用块的方式读入,接下来准备要分析的数据,成交量和股票名称,并对数据进行处理,主要是pandas库的运用
[Python] 纯文本查看 复制代码
# 以成交量为标准,顺序排列
data1 = data.sort_values(by='成交量', ascending=False)
# 新建DataFrame数据,包换股票名称和成交量
df1_1 = data1[['股票名称', '成交量']]
# 选择前十个数进行分析
df1_2 = df1_1.iloc[:10]
# 获取股票名称作为x轴数据,列表格式
x_list = df1_2['股票名称'].to_list()
# 获取成交量作为y轴数据,列表格式
y_list = df1_2['成交量'].to_list()

接下来绘制图表,采用链式调用的方法,具体内容可以参考官方文档:Bmap - Bmap_base - Document (pyecharts.org)
柱状图:
[Python] 纯文本查看 复制代码
bar1 = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))
    .add_xaxis(x_list)
    .add_yaxis("股票成交量情况", y_list)
    .set_series_opts(label_opts=opts.LabelOpts(position="top"))
    .set_global_opts(title_opts=opts.TitleOpts(title="成交量图表"))
)

折线图,采用同样的数据:
[Python] 纯文本查看 复制代码
line = (
    Line(init_opts=opts.InitOpts(theme=ThemeType.ESSOS))
    .add_xaxis(x_list)
    .add_yaxis("股票成交量情况", y_list)
    .set_series_opts(label_opts=opts.LabelOpts(position="top"))
    .set_global_opts(title_opts=opts.TitleOpts(title="成交量图表"))
)

接下来就是将图标保存进同一个html界面,选择page对象
[Python] 纯文本查看 复制代码
page = Page()
page.add(
    bar1,
    line)
page.render("某球网.html")

这样就完成了
效果1.png 效果2.png

大家有其他想做的网站,可以留言,笔者大学牲实力有限,大佬轻喷






免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xiaomayi2012 发表于 2024-8-4 14:18
buluo533 发表于 2024-8-3 22:52
这不是图片吗?

发错了  不好意思    https://www.jiuyangongshe.com/action/2024-08-02   这个获取json数据  里面有加密
vista_info 发表于 2024-8-3 19:28
图像的纵坐标可以不需要那么多0,纵坐标单位改成“亿”方便阅读
 楼主| buluo533 发表于 2024-8-3 19:51
vista_info 发表于 2024-8-3 19:28
图像的纵坐标可以不需要那么多0,纵坐标单位改成“亿”方便阅读

看自己的需求吧,y轴纵坐标可以改显示范围,该大一点就可以了
 楼主| buluo533 发表于 2024-8-3 20:02
vista_info 发表于 2024-8-3 19:28
图像的纵坐标可以不需要那么多0,纵坐标单位改成“亿”方便阅读

还有个问题就是如果有亿或者万做单位,pandans排序的时候会放在后面,所以这个会要求变换两次
xiaomayi2012 发表于 2024-8-3 21:44
楼主 分析分析 这个网站哈  https://www.jiuyangongshe.com/action
xuanqi521 发表于 2024-8-3 21:47
xiaomayi2012 发表于 2024-8-3 21:44
楼主 分析分析 这个网站哈  https://www.jiuyangongshe.com/action

图片能爬吗
289051401 发表于 2024-8-3 22:23
图片爬取会下载到本地的吧
 楼主| buluo533 发表于 2024-8-3 22:52
xiaomayi2012 发表于 2024-8-3 21:44
楼主 分析分析 这个网站哈  https://www.jiuyangongshe.com/action

这不是图片吗?
foreverlcy 发表于 2024-8-4 08:39

能爬,可以学习爬漫画网站
QT2008 发表于 2024-8-4 08:44
写的不错 学习下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-11 20:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表