Pythonでスクレイピングー貿易統計で使う輸出品目分類をPyhotnで自動取得


このドキュメントのテーマ

Pyhonを使用してイケてないWebページのデータをイケてるCSV出力に!!

何をしたかったのか?

e-statで提供される普通貿易統計をダウンロードしたら品目がHSコードという統計品目コードになっていてどの品目であるかのマスタをダウンロードしたかった。

ダウンロードしたかったデータは存在するのか?

結論から言うと、存在しない。
税関のサイト(下図)のように品目の大枠の分類ごとにhtmlのテーブルタグが作成され、ドラッグして表計算ソフトへ貼り付け...が1回でできないようになっている。
手操作で行おうとすると21回もドラック&ペーストしないといけないと思うと
とても心理的負荷が高く、イケてない!!
(オープンデータとか言っておきながらマスタデータが利用しにくいようになっているのは非常に残念。)

何をしたか

PyhotnによるWebスクレイピングにてCSVに保存するコードを作成!

コード

makeCSV_HScode.py
import sys
import re
from urllib.request import urlopen
from html import unescape
import csv

def main():

    # 輸出統計品目表のURL(2019年4月版を入手)
    f=urlopen('https://www.customs.go.jp/yusyutu/2019_4/index.htm')

    # エンコード指定
    encoding=f.info().get_content_charset(failobj="shift-jis")

    # 指定されたURLを指定エンコードで読む
    html = f.read().decode(encoding)

    # CSVファイルのヘッダ項目書き込み
    writecsv('HSCodelist.csv','w','分類','内容')

    # 指定されたURLの一部を読み取り、正規表現で指定された内容を1行として切り出し、文字処理を行う。
    for partial_html in re.findall(r'(<td width="10%" nowrap="nowrap">第..類</td><td>\S*</td>)' ,html,re.DOTALL):
        strcd=re.search(r'(第.*類)</td>',partial_html).group(0)
        strcd=strcd[1:3]
        strcd=int(strcd)


        name=re.search(r'(<td>\S*)',partial_html).group(0)
        offset=len(name)-5
        name=name[4:offset]

        # CSVファイルへの書き込み
        writecsv('HSCodelist.csv','a',strcd,name)

# CSVへの書き込み関数    
def writecsv(filename,mode,value_No,value_str):

    with open(filename,mode,newline='',encoding='cp932') as f:
        writer= csv.writer(f,lineterminator='\n')
        writer.writerow([value_No,value_str])


if __name__ =='__main__':
    main()

ハマったところ

指定されたURLの一部を読み取り、正規表現で指定された内容を1行として切り出す部分。
正規表現に慣れていなかったので、分類コード(HSコード)の先頭2桁に相当する「第xx類」と分類名を1セットにして取り出すところ。
試行錯誤ののち、取得できた。

結果

下図のようにCSVデータ取得完了!!