iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
Software Development

Python 爬蟲這樣學,一定是大拇指拉!系列 第 22

[Python 爬蟲這樣學,一定是大拇指拉!] DAY22 - 實戰演練:HTML Response - 抓取股票代碼清單 (1)

承接上篇,抓日成交資訊時,我們得知道股票代碼,那如果我想要有一個可以定時更新的股票代碼清單,要去哪裡拿呢?

抓取所有股票代碼 - 尋找 URL

  1. 一樣到證交所網站,點選產品與服務證券編碼底下的證券編碼查詢證券編碼公告兩個都可以用。差別在於證券編碼查詢出來的結果可以自己設定 Filter,而證券編碼公告就是全部上市的股票代碼,包含股票、權證、ETF等等全部都給你啦!至於要使用哪個,可以依照自己的需求去做選擇。我自己是只需要上市股票的代碼而已,又懶得另外處理分類,所以選擇從證券編碼查詢抓取股票代碼。
    https://ithelp.ithome.com.tw/upload/images/20211007/20139358IHbVaHYUJn.png

  2. 點選證券編碼查詢頁面的證券編碼 分類查詢
    https://ithelp.ithome.com.tw/upload/images/20211007/20139358jKqNVuHcKQ.png

  3. 會來到此頁面,把 Filter 條件設定好,按下確定。
    https://ithelp.ithome.com.tw/upload/images/20211007/20139358SFr5RjTyik.png

  4. 結果頁面:
    https://ithelp.ithome.com.tw/upload/images/20211007/20139358BPAVPsFyc9.png

  5. 依照前篇所教的來確認 URL、Headers、Query、Request/Response 等資訊。另外,前篇提到從Fetch/XHR 去找 URL 的方法,但我們在這個頁面上用 Fetch/XHR 找的話是找不到該 URL 的,所以可以知道這是靜態網頁 HTML。我們只要把開發人員工具切換到 All 就能找到了。
    https://ithelp.ithome.com.tw/upload/images/20211007/20139358qJUu5atfdf.png

  6. 奇怪!?阿怎麼 Response 有亂碼?
    一樣根據前篇所教的,確認它 Response HeadersContent-type
    Content-Type:text/html;charset=MS950
    OK!是編碼的問題,所以之後在爬蟲程式記得處理,避免亂碼。
     

  7. 整理一下所知資訊:

    • URL:https://isin.twse.com.tw/isin/class_main.jsp
    • 必要的 Query:market=1&issuetype=1&Page=1&chklike=Y
    • 所以可以根據需求在 Query 的 market、issuetype、Page、chklike 代入自己要的值。
    • HTTP Method 是 GET。
    • Content-Type:text/html;charset=MS950,所以格式是 HTML,編碼為 MS950。

    URL 複習傳送門
    HTTP Message 複習傳送門
    HTTP Method 複習傳送門

抓取所有股票代碼 - 安裝 Beautiful Soup

但 Requests 套件本身沒有支援 HTML 的 parser,所以要嘛自己寫要嘛裝別的套件。
用膝蓋想也知道,當然是裝套件囉!/images/emoticon/emoticon37.gif

我們要使用的是套件叫做 Beautiful Soup。它的特色就是讓不同的 HTML Parser 透過它提供的 Interface 來統一操作方法 。

  • 安裝 Beautiful Soup。

    pip install beautifulsoup4
    
  • 再來是安裝 Parser。Beautiful Soup 除了有支援 Python 原生的 HTML Parser,也有支援一些第三方的 Parer。
     
    引用自Beautiful Soup 官方

    If you can, I recommend you install and use lxml for speed. If you’re using a very old version of Python – earlier than 2.7.3 or 3.2.2 – it’s essential that you install lxml or html5lib. Python’s built-in HTML parser is just not very good in those old versions.

    官方文件是推薦使用 lxml。所以我們就安裝 lxml 吧!

  • 安裝方法:

    pip install lxml
    

    另外,下圖是官方有支援的 Parser 及差異比較。

    https://ithelp.ithome.com.tw/upload/images/20211007/20139358WRIJkKdJqC.png
    表格來源

  • 都安裝完成後測試一下。

    from bs4 import BeautifulSoup
    
    html = "<html>test test test</html>"
    soup = BeautifulSoup(html, "lxml")
    

本篇章目前先這樣,讓大家消化一下,Beautiful Soup 的基本用法就不另外講解了,建議可以看一下 Beautiful Soup 官方文件的 Quick Start。下篇文章就要開始講解怎麼用程式抓股票代碼清單囉!


上一篇
[Python 爬蟲這樣學,一定是大拇指拉!] DAY21 - 實戰演練:JSON Response - 抓取個股日成交資訊
下一篇
[Python 爬蟲這樣學,一定是大拇指拉!] DAY23 - 實戰演練:HTML Response - 抓取股票代碼清單 (2)
系列文
Python 爬蟲這樣學,一定是大拇指拉!30

尚未有邦友留言

立即登入留言