Try   HackMD

爬蟲教學3_對下載的檔案網址做直接處理

這次的教學會用到兩個套件

  1. request
  2. pandas
  3. StringIO(內建)
  4. datetime
    請安裝這三個套件

我們常常瀏覽網站中,如果需要下載資料的話。

會對文字或圖片點一個連結點了之後就會開始下載檔案。

其實這樣的方式的原理是讓你的瀏覽器跳到其他的頁面,讓其他頁面對你的電腦輸入檔案進而下載。當然的,用request一樣可以對這些檔案進行抓取。

但當然的,不可能python會看得懂每種檔案並進行處理。所以我們會用到一個叫做"pandas"的套件讓電腦讀資料檔案並且做分析

接下來我們就來示範一下抓取股票資料(csv檔)的即時資訊。

!pip install requests !pip install pandas !pip install datetime

接下來,我們來抓一些股票的資訊好了。

其實提供金融股票資訊的網站有很多,

其中在yahoo就有提供下載全球股票的資訊,但它好像只有提供下載csv檔案欸。所以我們就來處理csv檔吧~

在pandas套件中,有一個可以讀取許多檔案格式的功能,所以我們來用這個功能來讀取csv檔資料
但在處理資料之前,我們還是來看看網頁要怎麼抓資料好了

它的網址格式如下:
https://query1.finance.yahoo.com/v7/finance/download/{股票代號}?period1={開始時間}&period2={結束時間}&interval=1d&events=history&includeAdjustedClose=true

其中我們會用到的通常只會有我大括號裡面要設定的三個變數

股票代號的格式為:代號.地區

開始時間為:1970年到現在的總秒數

結束時間為:1970年到現在的總秒數

當然以我們自己的人腦要算秒數難度超級高,所以我們會用datetime套件來作時間運算

大概就是這樣跟之前的爬蟲大同小異所以我直接在程式碼裡面進行註解你可以嘗試更改程式碼看執行出來的結果,我相信你會更加了解程式內部的運作

#顯示表格 import requests import pandas as pd from io import StringIO import datetime starttime = int((datetime.datetime(2021,4,29,0,0,0)-datetime.datetime(1970,1,1,0,0,0)).total_seconds()) # 開始抓取的時間設為2021/4/29 00:00:00 endtime = int((datetime.datetime(2022,4,29,23,59,59)-datetime.datetime(1970,1,1,0,0,0)).total_seconds()) # 停止抓取的時間設為2022/4/29 23:59:59(時間超過現在不會報錯)如果要今天的話就是datetime.datetime.now() stock = '2330.TW' #台積電股票代號 #股票格式編號Ex.(股票代號.國家代號) url = f"https://query1.finance.yahoo.com/v7/finance/download/{stock}?period1={starttime}&period2={endtime}&interval=1d&events=history&includeAdjustedClose=true" # 網址 #print(url) headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36" }#反爬蟲機制(網站裡有設定) response = requests.get(url, headers=headers)# 利用 requests 來跟遠端 server 索取csv資料 df = pd.read_csv(StringIO(response.text),index_col = "Date") #將資料print出來並將日期作為欄位名稱 df #顯示出DataFrame
#抓取某列 import requests import pandas as pd from io import StringIO import datetime starttime = int((datetime.datetime(2021,4,29,0,0,0)-datetime.datetime(1970,1,1,0,0,0)).total_seconds()) # 開始抓取的時間設為2021/4/29 00:00:00 endtime = int((datetime.datetime(2022,4,29,23,59,59)-datetime.datetime(1970,1,1,0,0,0)).total_seconds()) # 停止抓取的時間設為2022/4/29 23:59:59(時間超過現在不會報錯)如果要今天的話就是datetime.datetime.now() stock = '2330.TW' #台積電股票代號 #股票格式編號Ex.(股票代號.國家代號) url = f"https://query1.finance.yahoo.com/v7/finance/download/{stock}?period1={starttime}&period2={endtime}&interval=1d&events=history&includeAdjustedClose=true" # 網址 #print(url) headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36" }#反爬蟲機制(網站裡有設定) response = requests.get(url, headers=headers)# 利用 requests 來跟遠端 server 索取csv資料 df = pd.read_csv(StringIO(response.text),index_col = "Date") #將資料print出來並將日期作為欄位名稱 #當然,你也可以取用某一欄轉換成List list_column = df['Open'].tolist() print(list_column)

下一篇: https://hackmd.io/@real7660/BkffUZIac