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()
ハマったところ
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セットにして取り出すところ。
試行錯誤ののち、取得できた。
結果
Author And Source
この問題について(Pythonでスクレイピングー貿易統計で使う輸出品目分類をPyhotnで自動取得), 我々は、より多くの情報をここで見つけました https://qiita.com/rassea777/items/7531f0de6658b875c23b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .