2021年7月24日 星期六

不到20行Python程式就能從農情報告資訊網中算出南投百香果產值佔合國87.7%

今天是放假日,但花時間研究的問題是:為什麼百香果的故鄉是在南投?每次有人問這個問題,總是要上網找資料, 本篇文章將介紹如何用不到20行Python程式就能從農情報告資訊網中算出南投百香果產值佔合國87.7%。

以下是程式的執行結果:


程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import requests
from bs4 import BeautifulSoup
my_data = {'accountingyear': '109', 'item': '03', 'crop':'643', 'city':'00'}
r = requests.post("https://agr.afa.gov.tw/afa/pgcropcity.jsp",my_data )
soup = BeautifulSoup(r.text, 'lxml')
result = soup.find("div", class_="DivRestTbl")
h = {}
n=9
while result.select('td')[n::1]:
    d = {}
    for th, td in zip(result.select('td')[1:5], result.select('td')[n+1::1]):
        d[th.text.strip()] = td.text.strip().splitlines()
    h[result.select('td')[n].text]=d
    n+=5
print('南投縣的收量是', h['南投縣']['收量'][0], result.select('td')[8].text)
print('全國的收量是', h['合\u3000\u3000計']['收量'][0], result.select('td')[8].text)
print('南投收量佔全的',int(h['南投縣']['收量'][0].replace(',',''))/int(h['合\u3000\u3000計']['收量'][0].replace(',',''))*100, '%')

程式解說:
第1-2行為引入爬蟲的套件。
第3-6行是採用POST來讀取資料,並找出<div>標籤且類別為"DivRestTbl"。
第7-14行是把資料打包成二維的字典,且能用縣市來當成鍵值來讀值,而且也能讀取收量等數值。
第15-17值是顯示,注意因收量的值是字串,需要用int()函式來轉換,因為有三位加上',',所以要用replace()函式來去除','。


沒有留言:

張貼留言