爬取统一发票号码对奖
这篇文章会使用 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
微信扫码关注
抖音扫码关注