クラスほとんどなし、liなし、改行と空白まみれのサイトをごり押しでスクレイピングした話
お仕事でとあるサイトをスクレイピングすることになった。
普通スクレイピングといえばbeautufulsoupとかをつかってaタグをさがしてli探してそこにおいてある情報を抽出とかっていうのが普通。
なのだが、今回受けたサイトがひどいものだった。内容はタイトルの通り。ほぼ役には立たないが対処法も一応書いておく。
チェーン展開ししている全国の店舗の情報をホームページからリンクを取得してそこから店舗情報を取得する案件。
まず親ページに子のリンクを省略せず直で置いている上に、タグにクラスもついていない。全リンクを全部取得してリンクの法則性にしたがって抽出。
この時点でなんだこれと思ってたがここからが地獄だった。
店舗ページに行くと案の定には住所や電話番号が載せられた表のようなものがあり、「この表についてるクラスで絞りこんで取得すればええんやな」って思った瞬間に悪い予感がする。
ブラウザ上で表の上で右クリックしてインスペクターを眺めてみると、なんと店舗情報の表だと思っていたものは四角形にテキストを置いただけ、しかも文字の間隔は改行と空白で調節してある場所もある。まじでキレそうだった。
だが仕事は仕事、クライアントの期待には応えなければならない(めんどくさい仕事を押し付けられただけなかんじもしたが)。
ということでパワープレイ決行。考えたら負け。
shop_info=soup.find('div', attrs={'class':'shop-info' }).text
info_items = shop_info.split('\n')
datas = [a for a in l if a != '']
試行錯誤の結果、情報を全てテキストで取得し、改行で区切ってリスト化、空のリストは全て削除でなんとか情報を取得。
これであとはいつも使ってる住所分割ツールで一発だと思った矢先、エラーが吐き出される。おもむろに住所リストを表示してみると、都道府県が省略されている場所が。
表記統一しろや。
ヘタクソなうっせぇわみたいな声が出た。
さすがにこればっかりはどうしようもないので手で入力。エンジニアになって地理が得意なのが生きるとは思わなかった。
pandasを使ってCSV出力、無事納品したのだが、所要時間5時間。
疲れたのでここでしめようと思います。
フォローしてね。
この記事が気に入ったらサポートをしてみませんか?