主要內容
_下載台銀匯率與格式化輸出、輸出儲存成CSV檔
_反反爬蟲加上headers參數偽裝瀏覽器
1.下載台銀匯率與格式化輸出、輸出儲存成CSV檔
資料來源:台灣銀行牌告匯率
老師的範例是透過個別的class取得資料
但是class是可以共用的,所以要找出順序的規則
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import requests from bs4 import BeautifulSoup html = requests.get("https://rate.bot.com.tw/xrt?Lang=zh-TW") html.encoding="utf-8" sp = BeautifulSoup(html.text, "html.parser") data_name=sp.find_all("div","hidden-phone print_show") data1 = sp.find_all("td","rate-content-cash text-right print_hide") data2 = sp.find_all("td","rate-content-sight text-right print_hide") print("幣別,現金買入,現金賣出,即期買入,即期賣出") s="幣別,現金買入,現金賣出,即期買入,即期賣出\n" for i in range(0,len(data_name)): print(data_name[i].text.strip()+","+data1[i*2].text+"," +data1[i*2+1].text+","+data2[i*2].text.strip()+"," +data2[i*2+1].text.strip()) s+="{},{},{},{},{}\n".format(data_name[i].text.strip(), data1[i*2].text,data1[i*2+1].text, data2[i*2].text.strip(), data2[i*2+1].text.strip()) print(s) # f=open("rate.csv","w") # f.write(s) # f.close() |
我的取得方式
因為資料是寫在table裡的每一列(tr)裡的儲存格(td)
所以找出表格裡的tr所在,再取出td的資料即可
然後除了寫入csv檔之外,也寫入excel檔
需要留意的部分是第一個td裡面還有div
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import requests from bs4 import BeautifulSoup html = requests.get("https://rate.bot.com.tw/xrt?Lang=zh-TW") html.encoding="utf-8" sp = BeautifulSoup(html.text, "html.parser") # print(len(sp.find("tbody").find_all("tr"))) # print(sp.find("tbody").find_all("tr")[0].find_all("td")[0].find("div","visible-phone print_hide").text.strip()) # print(sp.find("tbody").find_all("tr")[0].find_all("td")[1].text.strip()) # print(sp.find("tbody").find_all("tr")[0].find_all("td")[2].text.strip()) # print(sp.find("tbody").find_all("tr")[0].find_all("td")[3].text.strip()) # print(sp.find("tbody").find_all("tr")[0].find_all("td")[4].text.strip()) s="幣別,現金買入,現金賣出,即期買入,即期賣出\n" data=[] cols=["幣別","現金買入","現金賣出","即期買入","即期賣出"] index=[] for i in range(0,len(sp.find("tbody").find_all("tr"))): d1=sp.find("tbody").find_all("tr")[i].find_all("td")[0].find("div","visible-phone print_hide").text.strip() d2=sp.find("tbody").find_all("tr")[i].find_all("td")[1].text.strip() d3=sp.find("tbody").find_all("tr")[i].find_all("td")[2].text.strip() d4=sp.find("tbody").find_all("tr")[i].find_all("td")[3].text.strip() d5=sp.find("tbody").find_all("tr")[i].find_all("td")[4].text.strip() print(d1,d2,d3,d4,d5) s+="{},{},{},{},{}\n".format(d1,d2,d3,d4,d5) data.append([d1,d2,d3,d4,d5]) index.append(i+1) f=open("rate_0905-21.csv","w") f.write(s) f.close() import pandas as pd df = pd.DataFrame(data,index,cols) print(df) df.to_excel("rate_0905-21.xlsx") |
2.反反爬蟲加上headers參數偽裝瀏覽器
有的網站會透過檢查request裡的headers,來判斷是否為瀏覽器
因此,可以在request時,設定headers的”user-agent”資料
headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"} html = requests.get("https://www.google.com.tw/search?q="+x,headers=headers)