分享好友 最新动态首页 最新动态分类 切换频道
Python爬虫系列-获取每天黄金价格(编写爬虫的过程和编写代码思路详细解析)
2024-12-29 09:14

        最近因为经济形势不好,黄金这样的硬通货价格持续走高,而且现在已经到了相当之高的程度。介于理财投资的低迷,黄金的长期投资说不定可以跑赢通胀。对于我们新手的投资,本着低买高卖的原则,总不会亏太多,这样我们就需要一个可以每天获取黄金价格的python脚本,每天爬取我们需要的黄金价格,然后大家可以根据需要添加发送邮件给自己等功能,做一个自动推送黄金价格的小工具。

Python爬虫系列-获取每天黄金价格(编写爬虫的过程和编写代码思路详细解析)

        先在网上随便找一个黄金价格的网站,比如下面的这个链接:

如上图,我们可以看到,这个网站有每天的黄金基础价、零售价、回收价,下面的列表中有我们需要金价,点击上面的黄金基础价、零售价、回收价,下面的列表也会切换到相应的项目的价格上去,而我们的目标就是获取下面的列表中每天的金价了。

我们先试试edge浏览器的f12开发者调试模式,如下图:

那我们使用Fiddler直接抓包看看(你也可以使用Chrome浏览器的开发者模式抓包,这个网页不会报错,我想介绍给大家更通用的方法,所以使用了Fiddler)。打开我们的Fiddler Classic,随便选择一个左侧列表中嗅探出的网页项目,点击右上方Inspectors,并切换到JSON选项卡,如下图:

然后我们不停切换左侧列表嗅探出的网页,并观察右下角的JSON窗口的内容变化,当切换到

 以上链接时,如下图:

可以看到JSON窗口返回了我们需要的黄金单价,和网页中比较下,发现它是和网页的排除顺序相反,最新日期的数据是在最后的,而且通过这个网址传递的参数分析,它的参数如下:

codes=JO_52683

style=3

pageSize=30

time=1708922877928

显然其中的codes是切换黄金基础价、零售价、回收价的,一共有三种格式:

黄金基础价: JO_52683

零售价: JO_52684

回收价: JO_52685

style显示是一个类型,我们暂时不需要,pageSize是每次使用这个网址请求服务器返回数据时,服务器返回的数据条数数,pageSize=30就是返回30条数据,经过我用python的request发包测试,最少可以返回1条,最多返回500条数据。最后的time时间戳没有写明,但显然就是一个毫秒级时间戳(代表当前日期时间),实际测试时发现服务器并不验证这个时间戳,也就是重复传一个固定的时间戳也可以,当然我在我的代码中还是模拟了下当前时间戳。

 

下面是我用python构造了模拟发包获取服务器返回的json数据的函数:

 

 我来解释下这个函数,第一句是使用requests库的get方法,通过传入我们构造的参数url网址和header发包头,来模拟发送给服务器,使之返回我们需要的json结果,其中pageSize(每页数量),pagecount(返回总页数),data_style(金价的类型),header(网页发送时的请求头),time(当前时间戳)都是我们构造函数的模拟参数,通过调用此函数时自定义传入即可。第二句是按照utf-8的格式转码我们获得的服务器返回值。因为服务器返回的是如下面格式字符串(以下的返回值我已做过格式化处理方便大家查看)

 

因此我们需把上面的字符串转换成我们可以操作的json格式,所以先用第三句的去掉这个字符串的参数名'var quote_json =,然后把这个字符串放入json.loads函数中载入成标准的json数据格式方便操作。我们观察下上面的序列构造,显然我们只需要JO_52683数组中的q1和time时间戳(此时间戳是金价数据对应的日期),经过一番构造后,有了如下函数

 

其中,一共4个参数,其他之前后已介绍过,json_data就是我们上一步获得的json格式数据,我们需要在这个函数中,解析出我们需要的数据。因为返回的json是逆序的日期排列,也就是最新的日期金价在最后面,我们我们需要逆循环读取出数据。

要逆向循环,即从高到低循环,你可以使用函数的三个参数:起始值、结束值和步长。当步长为负数时,可以实现逆向循环。如果你想要从开始到结束(包含,你可以这样做:

 

这里的解释如下

  • 是循环的起始值,因为在Python中是包含起始值、不包含结束值的,所以要从开始。
  • 是循环应该停止的值的前一个位置。由于不包括这个值本身,如果你想循环到,你需要写作为结束值。
  • 是每次循环中索引减少的量,即步长。

然后我们构造一个item变量,读取data键值中的"JO_52683"数组,也就是前面序列中的

 

然后我们通过使用item["q1"]和item["time"]取出每个数组中的金价和日期时间戳就行了,然后通过下面的函数把时间戳转换成相应的日期格式

 

其中因为时间戳是UTC格式,是美国东时间,所以还要增加24小时*60分钟*60秒,因为是毫秒级需除以1000转换成秒,因此最终格式为timestamp = time / 1000 + 24 * 60 * 60,然后通过datetime.utcfromtimestamp函数的strftime转换成2024-02-26这样的格式即可。

最后我们只要把所有函数串联起来调用即可,如下面的完整代码:

 

其中的pageMax是你需要爬取的页数,取的大一点不要紧,因为爬取不到数据会报错停下。请看如下的爬取结果: 

以上是我的爬虫教程,给大家学习参考用,请不要把爬虫用于不良目的,爬取测试时请添加延时,不要增加服务器负担,谢谢观看

2024.04.07更新代码(增加数据写入EXCEL文档功能、修复utcfromtimestamp不在可用bug):


最新文章
创新驱动发展:发展新引擎 动能更强劲
  【十年答卷】  光明日报记者 杨舒 刘坤  第11位!不久前,世界知识产权组织发布《全球创新指数2022》,这是我国在其中的最新国际排名。从2012年的第34位跃升至2022年的第11位,十年跨越,折射出中国创新能力持续攀升的勃勃态势。 
金圣青花瓷多少钱一包烟 金圣青花瓷烟价格及图片
金圣青花瓷多少钱一包烟,金圣青花瓷烟一般是指智圣出山产品,在市场上很受欢迎,市场价格也很高。一般很难买到。那么这款金圣青花瓷烟的价格是多少呢?具体价格下面跟着小编一起来了解下。1、金圣(智圣出山)参考价:100元/包金圣(智圣出山)
超逼真美女写真生成:AI工具评测与实用教程大全!
搜狐简单AI 是一款功能丰富、易于上手的AI生成工具,旨在为广大用户提供优质的AI画作体验。它具备多样的模板选择,用户可以选择不同的风格,非常适合初学者和普通用户。这款工具的最大优势就是完全免费,适用于大多数需要生成美女写真的人
SEO怎么实现页面加载速度优化
优化页面加载速度对于提升用户体验和搜索引擎排名至关重要。本文将从以下几个角度进行探讨:第一,技术优化,包括使用CDN和压缩文件;第二,图片优化,确保快速加载;第三,简化代码,减少冗余元素。我们将深入探讨技术优化这一主题。CDN可
旅游在小红书推广引流怎么做,这样操作开通小红书广告投放
旅游在小红书推广引流怎么做在本文中,我们将分享一种有效的方法开通小红书广告投放。小红书是一个以旅游为主题的社交媒体平台,拥有庞大的用户群体,通过在小红书上进行广告投放,可以有效地吸引更多潜在游客并提升品牌影响力。下面,我们
腾讯会议怎么做特效教程,腾讯会议效果图:在线特效教程大全
摘要:腾讯会议怎么做特效教程,场课为您整理出关于腾讯会议怎么做特效教程的相关在线教程知识,欢迎访问了解腾讯会议怎么做特效教程腾讯会议怎么做特效教程图片:的内容。过去两年多时间里,视频会议成为职场工作乃至社会常态,在各类场景
Windows永久免费版最新进展:功能增强与用户体验提升,值得期待的未来版本即将发布
  Windows永久免费版最新进展:功能增强与用户体验提升,值得期待的未来版本即将发布  最新消息称,微软近期在其官方网站上确认了即将推出的Windows永久免费版的多项新功能和用户体验改进。这一消息引发了广大用户的热烈讨论,许多人对
构建可以查找相似图像的图像搜索引擎的深度学习技术详解
来源:DeepHub IMBA“按照片进行搜索”方式已经出现在各个领域,特别是在电子商务网站中(例如淘宝),并且 “通过关键词搜索图片”(对图片内容的理解)早已被谷歌、百度,bing等搜索引擎使用(图片搜索)。我认为自从计算机视觉界轰动一
程序员副业100问 | Q7:AI会替代程序员吗?
大家好,我是易安。几个月前我带的一个实习生,用AI工具3天时间就搞定了我之前预估需要2周的功能开发。不仅实现了所有要求,代码质量和单测覆盖率都异常优秀。今天,让我聊聊程序员在AI时代的生存之道。最近半年,我们团队的变化很大:代码
「排列五最大值振幅走势图近100期」体彩排列五走势图
排列五最大值振幅走势图近100期主要提供奖号最大值振幅的不同属性的走势分布 1、本图表默认30期内号码走势,可通过期号设置来自行设置期数区间选择参考走势图2、在预测行一可以点击输入您看好的当期号码,在预测行二中可以点击输入下一期看
相关文章
推荐文章
发表评论
0评