Python爬蟲抓取股票資訊

區塊鏈專家發表於2021-01-03

介於我們小組的專案需求是需要在網上抓取股票資訊,然後做成視覺化介面。最開始的想法是利用Java抓取,但是由於Java程式碼有點冗餘,決定使用Python。專案開始,遇到了極大的問題,由於小組成員對於Python的瞭解認知都有限,我們決定先開始自學,然後寫一個簡單的爬蟲。

但是在最開始的時候就產生了問題,我們最初設想是抓取東方財富網上的股票資訊。在我爬到了網頁的資訊以後,我發現,所有的股票資訊都是在頁面載入以後才能載入出來,這使初學Python的我產生了極大的困惑,但是介於時間有限,我也沒有進行系統的學習。於是,我只能另找方法,在網上尋求幫助。最終,我發現,我可以通過先爬取東方財富網的股票程式碼資訊然後將股票程式碼放在百度股市通裡面查詢,百度股市通的股票資訊是頁面載入的時候就直接載入到頁面上的。找到了解決問題的方法,我開始完成了我的程式碼。

複製程式碼
1 # Author:Kevin Sun
2 # 股市行情
3
4 import requests
5 from bs4 import BeautifulSoup
6 import traceback
7 import re
8 import time
9
10
11 def getHTMLText(url): #獲得所需的網頁原始碼
12 try:
13 user_agent = ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36’
14 headers = {‘User-Agent’: user_agent}
15 r = requests.get(url, headers=headers, timeout=30)
16 r.raise_for_status()
17 r.encoding = r.apparent_encoding
18 return r.text
19 except:
20 return “”
21
22 def getFileName():
23 dirname = time.strftime(’%Y%m%d’,time.localtime(time.time()))
24 dirname+=‘sh’
25 return dirname
26
27
28
29 def getStockList(lst, stock_list_url): # 獲得東方財富網上面上海股票的全部程式碼
30 html = getHTMLText(stock_list_url)
31 soup = BeautifulSoup(html, ‘html.parser’)
32 a = soup.find_all(‘a’) # 用find_all方法遍歷所有’a’標籤,然後在’a’標籤裡面提取出href部分資訊
33 for i in a:
34 try:
35 href = i.attrs[‘href’]
36 lst.append(re.findall(r"sh6\d{5}", href)[0]) # 用正規表示式匹配所需的資訊,“sh\d{6}”
37 #print(lst)
38 except:
39 continue
40
41
42 def getStockInfo(lst, stock_info_url, fpath):
43 ndate = time.strftime(’%Y%m%d’,time.localtime(time.time()))
44 for stock in lst:
45 url = stock_info_url + stock + ‘.html’ # 拼接url
46 html = getHTMLText(url)
47 try:
48 if html == “”:
49 continue
50 infoDict = {}
51 soup = BeautifulSoup(html, ‘html.parser’)
52 stockInfo = soup.find(‘div’, attrs={‘class’: ‘stock-bets’})
53 if stockInfo == None: # 判斷為空,返回
54 continue
55 # print(stockInfo)
56 # name = stockInfo.find_all(attrs={‘class’: ‘bets-name’})[0]
57 # print(name)
58 #infoDict.update({‘股票編碼’:stock})
59 #inp=name.text.split()[0]+":"
60 keyList = stockInfo.find_all(‘dt’)
61 valueList = stockInfo.find_all(‘dd’)
62 inp=stock+ndate+","+stock+","+ndate+","
63 for i in range(len(keyList)):
64 key = keyList[i].text
65 val = valueList[i].text
66 infoDict[key] = val
67 #print(inp)
68 inp+=infoDict[‘最高’]+","+infoDict[‘換手率’]+","+infoDict[‘成交量’]+","+infoDict[‘成交額’]+"\n"
69 print(inp)
70 with open(fpath, ‘a’, encoding=‘utf-8’) as f:
71
72 #f.write(str(infoDict) + ‘\n’)
73 f.write(inp)
74 except:
75 traceback.print_exc()
76 continue
77
78
79
80 def main(): # 主方法呼叫上面的函式
81 stock_list_url = ‘http://quote.eastmoney.com/stocklist.html’
82 stock_info_url = ‘http://gupiao.baidu.com/stock/’
83 output_file = ‘./’+getFileName()+’.txt’
84 slist = []
85 getStockList(slist, stock_list_url)
86 getStockInfo(slist, stock_info_url, output_file)
87
88
89 main()
複製程式碼
  程式碼中用到了Python中的非常方便的beautifulsoup庫(這個庫我在這裡就不多做解釋,我是參考了一個大牛的理解,連結:http://xcjcy.org/),爬蟲使用的是谷歌瀏覽器。程式碼中我也給了一些註釋,由於是Python初學者,有些地方難免有錯誤,之後在專案結束後會繼續學習Python完善。

相關文章