LoginSignup
2
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-03

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

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

何をしたかったのか?

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

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

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

2020-05-03 15.40のイメージ.jpg

何をしたか

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データ取得完了!!
2020-05-03 16.06のイメージ.jpg

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2