Python プログラミング

【Python】ヤマト運輸の荷物追跡

2021-07-05

ヤマトのWEBページリニューアルに対応して内容修正しました。
https://faq.kuronekoyamato.co.jp/app/customer/detail/a_id/3579

みなさん、こんにちは。いし(@ishilog2)です。

今回はPythonを用いて、ヤマト運輸から荷物状況をスクレイピングにて取得したいと思います。

導入編

今回のコードではrequestsとBeautifulSoup、Pandasを使用します。
インストールしていない方はインストールして下さい。

実践

実施すること

ヤマトの追跡サイトから画像の黄枠内の情報を取得します。
https://toi.kuronekoyamato.co.jp/cgi-bin/tneko

サンプルコード

新コード

旧コード

xxxxxxxxxxxxには追跡番号を入れてください。
このサンプルを使用すると次のような結果が取得できます。

解説

① requestsを用いてHTMLを取得

requests.get('URL')でHTML情報を全て取得します。取得した内容を変数rに格納しています。
”number00”:1の部分は○件目です。今回のサンプルは1件しか取得しないので1で固定しています。

② BeautifulSoupを使用してhtml形式にパース
①で習得したHTMLからBeautifulSoupオブジェクトを作成します。

パース(parse)とは

自分の環境で扱えるように解析、変換することをparseと言います。そしてパースする処理をまとめたプログラムのことをパーサー(parser)といいます。今回使用しているBeautifulSoupはこのパーサーとなります。

③ データの抽出

「meisai」というクラスの内容を変数rsに格納します。rsはリスト型となります。

④ リストの加工
リスト内表記を使用して、習得したデータをリストに格納・リスト内の要素の前後にある空白を削除します。splitlines()で改行コードで分割しています。

続いて荷物状況・日 付・時 刻・担当店名・担当店コード となるようにリストを分割します。
この際に先頭の3個を削除して8個ずつとします。

⑤ リストをデータフレームへ変換

pd.DataFrame()でリストからデータフレームへ変換します。
リスト1つ目はヘッダーのため2つ目からをデータフレームにしています。カラムにはリスト1つ目を設定します。

ターミナルから実行するサンプル

ターミナル(コマンドプロント)等で下記のコマンドを実行してください。
python3 + ファイル名 + 追跡番号を入力してください。

-Python, プログラミング
-, ,