您好,登錄后才能下訂單哦!
本篇內容主要講解“Python怎么爬取搜狐證券股票數據”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python怎么爬取搜狐證券股票數據”吧!
我們以上證50的股票為例,首先需要找到一個網站包含這五十只股票的股票代碼,例如這里我們使用搜狐證券提供的列表。
https://q.stock.sohu.com/cn/bk_4272.shtml
可以看到,在這個網站中有上證50的所有股票代碼,我們希望爬取的就是這個包含股票代碼的表,并獲取這個表的第一列。
爬取網站的數據我們使用 Beautiful Soup 這個工具包,需要注意的是,一般只能爬取到靜態網頁中的信息。
簡單來說,Beautiful Soup 是 Python 的一個庫,最主要的功能是從網頁抓取數據。
像往常一樣,使用這個庫之前,我們需要先導入該庫 bs4。除此之外,我們還需要使用 requests 這個工具獲取網站信息,因此導入這兩個庫:
import bs4 as bs import requests
我們定義一個函數 saveSS50Tickers() 來實現上證50股票代碼的獲取,獲取的數據來自于搜狐證券的網頁,使用 get() 方法獲取給定靜態網頁的數據。
def saveSS50Tickers(): resp = requests.get('https://q.stock.sohu.com/cn/bk_4272.shtml')
接下來我們打開搜狐證券的這個網址,在頁面任意位置右鍵選擇 查看元素,或者 Inspect Element,或者類似的選項來查看當前網站的源代碼信息。
我們需要先在這里找出網頁的一些基本信息和我們需要爬取的數據的特征。
首先,找到 Element,在下面的內容中找到網頁的 頭文件 (head)。然后找到網頁的 文字的編碼方式。這里這個網頁文字的編碼方式是 gb2312。
如果我們想爬取并正確顯示這個網頁上,就需要先對獲取到的網頁內容解碼。
解碼可以使用 encoding 這個方法:
resp.encoding = 'gb2312'
接下來使用 BeautifulSoup 和 lxml 解析網頁信息:
soup = bs.BeautifulSoup(resp.text, 'lxml')
這里為了方便后期的處理,首先使用 resp.text 將網頁信息轉成了文本格式,然后再解析網頁的數據。
接下來我們需要在網頁的源碼中找到需要爬取信息的標簽,這里我們需要爬取這個表格中的信息,首先,可以通過網站源碼的搜索功能搜索表格里的相關數據定位到表格的源碼。
同樣以這個頁面為例,一般網頁使用 HTML 語言編譯的,因為要準確定位,我們需要了解一些 HTML 語言的基礎內容。在這個頁面的源碼中,
<table 表示表格開始,后面是這個表格的一些屬性。</table> 表示表格結束。
首先,我們使用 soup.find 在網頁信息中找到這個表格標簽的入口:
table = soup.find('table', {'id': 'BIZ_MS_plstock'})
其中 'table' 表示這里需要找到一個表格,{'id': 'BIZ_MS_plstock'} 則是通過內容或者屬性實現表格的進一步定位。
找到表格的位置之后,我們需要繼續查找需要的數據,同樣以這個頁面為例:
在網頁開發語言中,
<tr 表示表格中開始新的一行,<td 表示在這一行中又新建了一列,而 </td> 則表示這一列結束了,對應的 </tr> 則表示這一行結束了。
通過該網頁的源碼,我們可以發現,
表格的第一行和第二行都是表頭的信息,第三行開始是五十家公司的股票信息。另外每家公司的股票代碼在表格的第一列位置。
因為,在Python中,我們需要從表格的第三行開始抓取,每行抓取表格的第一列的數據,將抓取到的數據轉換成文本格式,我們用一個列表 tickers 來存儲抓取到的數據:
tickers = [] for row in table.findAll('tr')[2:]: ticker = row.findAll('td')[0].text tickers.append(ticker + '.SS')
因此為了方便后續進行數據處理,這里我們存儲上證50的每家公司的股票代碼時,都在代碼后面再添加 '.SS' 的字符。這時我們運行目前的代碼,并將列表 tickers 輸出:
# 導入 beautiful soup4 包,用于抓取網頁信息 import bs4 as bs # 導入 pickle 用于序列化對象 import pickle # 導入 request 用于獲取網站上的源碼 import requests def saveSS50Tickers(): resp = requests.get('https://q.stock.sohu.com/cn/bk_4272.shtml') resp.encoding = 'gb2312' soup = bs.BeautifulSoup(resp.text, 'lxml') # print(soup) table = soup.find('table', {'id': 'BIZ_MS_plstock'}) # print(table) tickers = [] # print(table.find_all('tr')) for row in table.findAll('tr')[2:]: # print(row) ticker = row.findAll('td')[0].text tickers.append(ticker + '.SS') return tickers tickers = saveSS50Tickers() print(tickers)
觀察到輸出信息如下:
['600036.SS', '601229.SS', '600031.SS', '601166.SS', '600104.SS', '600030.SS', '603259.SS', '601668.SS', '601628.SS', '601766.SS', '601857.SS', '601398.SS', '601390.SS', '600029.SS', '600028.SS', '601818.SS', '601211.SS', '601066.SS', '601111.SS', '600837.SS', '600887.SS', '601888.SS', '600690.SS', '600519.SS', '600016.SS', '601989.SS', '601988.SS', '601601.SS', '600019.SS', '601186.SS', '600703.SS', '600196.SS', '601318.SS', '601800.SS', '600050.SS', '601319.SS', '601288.SS', '601688.SS', '603993.SS', '600309.SS', '600048.SS', '600276.SS', '601138.SS', '601336.SS', '601088.SS', '600585.SS', '600000.SS', '601328.SS', '601939.SS', '600340.SS']
這樣我們就從搜狐證券這個網站上爬取到了上證50的公司股票代碼,并將其以字符串的格式存放在了一個列表變量中。
一般像股票代碼這種內容,短時間內不會有很大的變動,所以我們也不需要每次使用時重新爬取,一種方便的做法是可以將股票代碼信息以文件的格式保存到本地,需要使用時直接從本地讀取就可以了。
這里我們將股票代碼數據保存為 pickle 格式。pickle 格式的數據可以在 Python 中高效的存取,當然,將文件導出成該格式前需要先導入相應的pickle 庫:
import pickle
pickle可以保存任何數據格式的數據,在經常存取的場景(保存和恢復狀態)下讀取更加高效。
把文件導出成 pickle 格式的方法是 pickle.dump,同時需要結合文件讀寫操作:
with open('SS50tickers.pickle', 'wb') as f: pickle.dump(tickers, f)
這里的 'SS50tickers.pickle' 就是保存的文件的名稱,'wb' 則表示向文件中寫入數據。pickle.dump(tickers, f) 表示將列表 tickers 寫入到文件中。
到此,相信大家對“Python怎么爬取搜狐證券股票數據”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。