伦敦黄金交易所实时行情(手把手地教你用Python自动爬取上海黄金交易所的早午盘金价与银价)
学会使用Python工具来爬取某些网站上的信息,对于平时工作会有很大的帮助,它不仅能极大地提高工作效率,而且还能实现自动化办公。那么,在这里将向大家介绍一下怎样采用python爬取上海黄金交易所网站上早盘、午盘的金价与银价,并实现每日定时自动化获取。
一、背景描述对于贵金属行业,有时候销售人员想知道每日黄金或银的价格,平时一般是通过打开上海黄金交易所网站 (https://www.sge.com.cn/) 进行查看。但是,这样是需要人为地每天去打开网站查看了才知,那么,有没有办法可以自动地获取到上面的金价或银价,然后在公司网站上自动显示金价或银价的结果呢?
答案肯定是可以的,下面开始一步一步教大家如何来实现这个功能。
二、Python高版本打包生成的执行文件在服务器上运行出错首先,先解决Pytho版本问题,代码留到后面才讲,本人之前采用的是python3.9 64位,这是一个较高的版本,通过pyinstaller -F -w goldprice.py 进行打包生成的goldprice.exe执行文件,在本机下面运行无误。但是将这个文件拷至公司内网服务器上运行就出错!error显示为:
Fatal error in launcher:Unable to create process using ;
即无法启动此程序,查询此错误的原因为计算机中丢失api-ms-win-core-path-11-1-0.dll这个文件, 如图1所示。
图1 服务器上运行生成的执行文件时出错
根据错误提示,分别通过下面两个方法进行了处理,但未成功,两种方法分别说明如下:
1、首先尝试一下最简单的方案,在网上搜索下载api-ms-win-crt-runtime-l1-1-0.dll文件。下载完成后将api-ms-win-crt-runtime-l1-1-0.dll文件复制到服务器上,位置于C:\Windows\SysWOW64(64位目录)或C:\Windows\System32(32位目录)。但是,拷过去时结果发现本身系统就有这个dll文件,故可以判断并非缺少这个dll文件的原因造成。
2、根据一个类似问题的网站上介绍,需要下载VC的应用程序(包含api-ms-win-core-path-11-1-0.dll的),即 vc_redist.x64.exe 这个应用安装文件来进行安装 , 但是,安装后问题依旧。
因此,通过以上简单的处理后,发现问题无法解决,该怎么办?
三、问题分析根据前面生成的执行文件,仅在本机上能正常运行,但放至服务器上运行出错,显然不行。毕竟,这个程序是要部署在服务器上来使用的,那么,通过本机的运行环境与服务器运行环境进行对比,得到如下信息:
1、服务器采用的系统是windows2008 R2 64位系统,已经算是非常老的系统。
2、python生成的执行程序在我本机运行环境是基于win10 professional版本。
3、Python版本是3.9版本且为64位。
因此,怀疑是因为打包生成exe文件的python版本过高,而导致生成的exe文件无法独立在原先较老的系统上运行。那么,考虑采取较低版本的python来对其重新打包生成。
四、问题解决1、下载安装旧版本Python
下载Python3.8.5的32位版本。如图4.1所示:
图4.1 Python3.8.5 32位
下载完成后,开始进行安装,我是将其安装在本机的D:\python385目录下面
2、配置Python环境
将Python3.8.5版本安装成功后,打开pycharm。打开获取金价程序 GoldPrice.py, 在pycharm的菜单上,点击file--->Settings-->Project:python-->Python Interpreter. 在Project Interpreter: 下拉框右边,点击“修改”按钮,如下图4.2所示.
图4.2 修改按钮图标
在弹出的下拉菜单中,点击“Add..." ,如下图4.3所示
图4.3 点击Add界面
在弹出的画面,如图4.4所示. 选择 Exsting environment
图4.4 选择Existing Interpreter
选择好Python3.8.5后,下面图4.5中红色框住的部分一开始是没有安装的。因此,为了金价爬取程序正常运行,需要先对相关库或组件进行安装,点击图4.5中右边的” “号进行搜索库并安装。
图4.5 点击 号进行组件或库的搜索安装
在弹出的窗体,如图4.6所示,输入要安装的组件或库名称,比如:requests, 直接输入 requests, 此时,下面会显示找到的库文件清单,光标定位到所需要安装的库文件上,然后点击左下面的"Install Package" 按钮,即可开始安装组件。
图4.6 库的查找与安装
采用相同的方法,依次将需要安装的库进行安装,之后,在图4.7中先点击Apply,再点击OK按钮。
图4.7 安装后点击Apply及OK按钮
接下来,创建一个打包的批处理文件. 如下图4.8所示.
打包批处理文件名为: scexe2.bat,在其中输入调用的python版本(python3.8.5)的pyinstaller文件来对金价获取程序goldprice.py进行打包。
图4.8 打包批处理文件
批处理文件scexe2.bat写好后保存在D:\目录下,直接双击scexe2.bat, 即可开始进行打包,过一会儿就生成了exe文件,默认在c:\dist 目录下面,如图4.9所示.
图4.9 打包生成好的exe文件.
将生成好的exe文件拷至远程主机中。比如:远程机中d:\eis目录下,如图4.10所示
图4.10 将生成的exe文件拷至远程服务器中.
五、测试生成的打包程序是否正常在远程服务器上,运行cmd,进入d:\eis,运行goldprice.exe, 如图5.1所示。可见程序运行后无误
图5.1 运行打包后的exe文件.
这一步无误后,我们就可以在服务器上,点击开始-->任务计划程序,之后创建基本任务,输入任务名称:例如:GetGoldPrice (任意取名,但最好方便记忆), 在希望任务何时开始时,选择“每天”,之后点击“下一步”,设置每天的开始时间,此处将金价获取时间设置早上8:40,在接下来是启动程序,点击下一步即可完成。
注意:在设置过程中的细节。希望任务触发时的条件,请选择“不管用户是否登录都要运行”
下面是设置好后的任务计划,如图5.2所示。
图5.2 设置好的任务计划
至此,python打包生成的exe文件在远程服务器上成功部署并设置每日8:40及13:30两个时间段定时自动获取。
六、Python爬虫代码终于到了Python爬取上海黄金交易所网站上数据的核心代码,废话少说,直接贴代码,本人经过调试运行无误。
##爬上海黄金网站上的金价信息import requestsfrom bs4 import BeautifulSoupfrom bs4 import BeautifulSoup as bfimport pymssqlimport refrom lxml import etreefrom urllib.request import urlopenurl = 'https://www.sge.com.cn/' ## 上海黄金网##反爬伪装##User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4315.4 Mobile Safari/537.36myheader = {'User-Agent': 'Chrome/88.0.4315.4'}result = requests.get(url, headers=myheader)html = result.textsoup = BeautifulSoup(html, 'lxml')# #页面解析# BeautifulSoup# print(soup.find_all('div',class_='touziList fs16')) ## soup.find('a',attrs={'class':'fleft'})gold_list = soup.find_all('div', class_='touziList fs16')#print('soup=',gold_list[0])# 金#_zaopangoldprice=soup.find('span',attrs={'class':'colorRed fs20'}).text ## 上海金早盘价(元/克) ---值_zaopangoldprice=soup.select("#dataStatistics0 .colorRed")[0].text# print('_zaopangoldprice=',_zaopangoldprice)_wupangoldprice=soup.select("#dataStatistics0 .colorRed")[1].text ## 上海金午盘价(元/克) ---值# print('_wupangoldprice=',_wupangoldprice)# 银_zaopanSilverprice=soup.select("#dataStatistics1 .colorRed")[0].text ## 上海银早盘价(元/克) ---值# print('_zaopanSilverprice=',_zaopanSilverprice)_wupanSilverprice=soup.select("#dataStatistics1 .colorRed")[1].text ## 上海银午盘价(元/克) ---值# print('_wupanSilverprice=',_wupanSilverprice)goldpricedesc = ""for nu in gold_list:goldpricedesc = goldpricedesc str(nu)# 将爬取的数据写入到SQL表中db = pymssql.connect(host=".", user="dsds", password="***s", database="gold", charset='utf8')cursor = db.cursor()sql = "insert into GoldPriceList(GoldPriceDesc,zaopangoldprice,wupangoldprice,zaopansilverprice,wupansilverprice,Remark) values('" goldpricedesc "','" _zaopangoldprice "','" _wupangoldprice "','" _zaopanSilverprice "','" _wupanSilverprice "',N'来源于上海黄金交易所')"# sql = "insert into GoldPriceList(GoldPriceDesc,Remark) values('" goldpricedesc "',N'来源于上海黄金交易所')"cursor.execute(sql)db.commit()db.close()# print('OK!从上海金价网获取当日金价数据完成!')
将以上代码保存为goldprice.py,打开pycharm,调用python3.8.5编译器来进行调试运行。
运行成功后,再通过cmd转入命令行状态下,执行命令:
pyinstaller -F -w goldprice.py (回车)
则自动进行打包,最终生成goldprice.exe可执行文件。
七:自动爬取数据到SQL数据库的结果通过以上自动化定时设置,每天两个时段就会自动地从上海黄金交易所网站上爬取早午盘数据,无须人为干预,将爬取到的数据自动地插入到服务器数据库中。如图7.1所示.
图7.1 每天定时自动爬取的金银早午盘数据
至此,一个完整的Python自动爬取上海黄金交易所网站上的早午盘金银价格数据,就这样圆满介绍完毕。
如果有不明白的地方或需要源码的朋友,可以关注我并在评论区下方进行留言,我将一一回复,谢谢!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com