2022江西紡織服裝周暨江西(贛州)紡織服裝產業博覽會隆重舉行
為深入學習貫徹落實黨的二十大和二十屆一中...
學會使用Python工具來爬取某些網站上的信息,對于平時工作會有很大的幫助,它不僅能極大地提高工作效率,而且還能實現自動化辦公。那么,在這里將向大家介紹一下怎樣采用Python爬取上海黃金交易所網站上早盤、午盤的金價與銀價,并實現每日定時自動化獲取。
對于貴金屬行業,有時候銷售人員想知道每日黃金或銀的價格,平時一般是通過打開上海黃金交易所網站 (https://www.sge.com.cn/) 進行查看。但是,這樣是需要人為地每天去打開網站查看了才知,那么,有沒有辦法可以自動地獲取到上面的金價或銀價,然后在公司網站上自動顯示金價或銀價的結果呢?
答案肯定是可以的,下面開始一步一步教大家如何來實現這個功能。
首先,先解決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爬取上海黃金交易所網站上數據的核心代碼,廢話少說,直接貼代碼,本人經過調試運行無誤。
##爬上海黃金網站上的金價信息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可執行文件。
通過以上自動化定時設置,每天兩個時段就會自動地從上海黃金交易所網站上爬取早午盤數據,無須人為干預,將爬取到的數據自動地插入到服務器數據庫中。如圖7.1所示.
圖7.1 每天定時自動爬取的金銀早午盤數據
至此,一個完整的Python自動爬取上海黃金交易所網站上的早午盤金銀價格數據,就這樣圓滿介紹完畢。
如果有不明白的地方或需要源碼的朋友,可以關注我并在評論區下方進行留言,我將一一回復,謝謝!
為深入學習貫徹落實黨的二十大和二十屆一中...
Burberry是一個具有濃厚英倫風的著...
高奢月子中心圣貝拉(SAINT BELL...
近年來,國際政治經濟環境復雜多變,不確定...
如果有這樣一...
近日上海智美顏和以60后--90后的不同...
名品導購網(www.cctv-ss.com)ICP證號: 蘇ICP備2023000612號-5 網站版權所有:無錫錫游互動網絡科技有限公司
CopyRight 2005-2023 版權所有,未經授權,禁止復制轉載。郵箱:mpdaogou_admin@163.com