某球网爬虫+简单可视化数据分析详细步骤

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


界面.png (246.05 KB, 下载次数: 0)
下载附件
2024-8-3 17:44 上传

数据嘎嘎多,还有一百多页,这里打开开发者工具,刷新界面进行抓包


数据抓包.png (218.62 KB, 下载次数: 0)
下载附件
2024-8-3 17:45 上传

这里面有很多数据,初学者可以用搜索查找数据,有经验的会选择XHR数据包,通过翻页来抓,都演示一遍


数据搜索.png (441.67 KB, 下载次数: 0)
下载附件
2024-8-3 17:49 上传

三个接口,都去看看,发现只有第一个接口包含一页的数据,选择第一个接口作为爬取对象,兄弟们都可以去看看
接下来就是翻页去抓XHR,可以多翻几页,可以看到里面数据是我们想要的


第二页.png (269.59 KB, 下载次数: 0)
下载附件
2024-8-3 17:51 上传

到了这里我们可以去请求测试一下,简单写一下
[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 (148.23 KB, 下载次数: 0)
下载附件
2024-8-3 18:05 上传

打印一下结果,这样就可以看到我们想要的数据,但是返回的内容没有被清洗,是以json格式返回的数据
接下来研究翻页逻辑,我们要的是他所有的数据,我们需要看的是负载的参数内容


翻页逻辑.png (77.67 KB, 下载次数: 0)
下载附件
2024-8-3 18:09 上传

这样对比想必大家应该看懂了他的翻页逻辑,接下来就是循环和提取需要的数据,我就不赘述了
这里为大家提供将万和亿单位数据转换为纯数据算法还有就是清洗空值,很简单,大家也可以自己去写,方便后续数据分析
[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 (388.96 KB, 下载次数: 0)
下载附件
2024-8-3 18:16 上传

同时我们要写入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 (118.22 KB, 下载次数: 0)
下载附件
2024-8-3 18:58 上传



效果2.png (122.46 KB, 下载次数: 0)
下载附件
2024-8-3 18:58 上传

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

数据, 下载次数

xiaomayi2012   


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

发错了  不好意思    https://www.jiuyangongshe.com/action/2024-08-02   这个获取json数据  里面有加密
vista_info   

图像的纵坐标可以不需要那么多0,纵坐标单位改成“亿”方便阅读
buluo533
OP
  


vista_info 发表于 2024-8-3 19:28
图像的纵坐标可以不需要那么多0,纵坐标单位改成“亿”方便阅读

看自己的需求吧,y轴纵坐标可以改显示范围,该大一点就可以了
buluo533
OP
  


vista_info 发表于 2024-8-3 19:28
图像的纵坐标可以不需要那么多0,纵坐标单位改成“亿”方便阅读

还有个问题就是如果有亿或者万做单位,pandans排序的时候会放在后面,所以这个会要求变换两次
xiaomayi2012   

楼主 分析分析 这个网站哈  https://www.jiuyangongshe.com/action
xuanqi521   


xiaomayi2012 发表于 2024-8-3 21:44
楼主 分析分析 这个网站哈  https://www.jiuyangongshe.com/action

图片能爬吗
289051401   

图片爬取会下载到本地的吧
buluo533
OP
  


xiaomayi2012 发表于 2024-8-3 21:44
楼主 分析分析 这个网站哈  https://www.jiuyangongshe.com/action

这不是图片吗?
smf123   

学到了,一直在学习
您需要登录后才可以回帖 登录 | 立即注册

返回顶部