爬取統一發票號碼,自動對獎
這篇文章會使用 Python 的 Requests 和 Beautiful Soup 函式庫,實作一個爬取當期統一發票號碼,並進行自動對獎網路爬蟲。
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
使用 Requests 抓取網頁內容
使用 Requests 函式庫的 get 的方法,抓取財政部稅務入口網裡統一發票網頁的內容,因為該網頁編碼為 utf-8,所以要加上 web.encoding='utf-8'
避免中文字出現亂碼。
import requests
url = 'https://invoice.etax.nat.gov.tw/index.html'
web = requests.get(url) # 取得網頁內容
web.encoding='utf-8' # 因為該網頁編碼為 utf-8,加上 .encoding 避免亂碼
print(web.text)
執行程式後,就可以看到抓取到的網頁內容。
使用 Beautiful Soup 取出中獎號碼
使用 Beautiful Soup 函式庫的 select 的方法,從抓到的網頁內容裡,找到 class 為「container-fluid」的 div,將其內容輸出後就是中獎號碼,但需要注意的是,如果直接將內容輸出放入串列,會自動加上換行符號 ( 因為原始資料裡有換行 ),此時可以透過串列 slice() 方法的操作,取出最後八碼即可。
import requests
url = 'https://invoice.etax.nat.gov.tw/index.html'
web = requests.get(url) # 取得網頁內容
web.encoding='utf-8' # 因為該網頁編碼為 utf-8,加上 .encoding 避免亂碼
from bs4 import BeautifulSoup
soup = BeautifulSoup(web.text, "html.parser") # 轉換成標籤樹
td = soup.select('.container-fluid')[0].select('.etw-tbiggest') # 取出中獎號碼的位置
ns = td[0].getText() # 特別獎
n1 = td[1].getText() # 特獎
# 頭獎,因為存入串列會出現 /n 換行符,使用 [-8:] 取出最後八碼
n2 = [td[2].getText()[-8:], td[3].getText()[-8:], td[4].getText()[-8:]]
print(ns)
print(n1)
print(n2)
輸入號碼後自動對獎
參考「統一發票對獎」文章範例,使用 while 迴圈和 for 迴圈,就能做到不斷輸入號碼並自動對獎的功能。
import requests
url = 'https://invoice.etax.nat.gov.tw/index.html'
web = requests.get(url) # 取得網頁內容
web.encoding='utf-8' # 因為該網頁編碼為 utf-8,加上 .encoding 避免亂碼
from bs4 import BeautifulSoup
soup = BeautifulSoup(web.text, "html.parser") # 轉換成標籤樹
td = soup.select('.container-fluid')[0].select('.etw-tbiggest') # 取出中獎號碼的位置
ns = td[0].getText() # 特別獎
n1 = td[1].getText() # 特獎
# 頭獎,因為存入串列會出現 /n 換行符,使用 [-8:] 取出最後八碼
n2 = [td[2].getText()[-8:], td[3].getText()[-8:], td[4].getText()[-8:]]
while True:
try:
# 對獎程式
num = input('輸入你的發票號碼:')
if num == ns: print('對中 1000 萬元!')
if num == n1: print('對中 200 萬元!')
for i in n2:
if num == i:
print('對中 20 萬元!')
break
if num[-7:] == i[-7:]:
print('對中 4 萬元!')
break
if num[-6:] == i[-6:]:
print('對中 1 萬元!')
break
if num[-5:] == i[-5:]:
print('對中 4000 元!')
break
if num[-4:] == i[-4:]:
print('對中 1000 元!')
break
if num[-3:] == i[-3:]:
print('對中 200 元!')
break
except: break
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~