てっとり早くスクレイピングしたかってん

A8バナー広告

この記事で書くこと

どんなことが問題になったか?

簡単に問題になったことを紹介する。

  • スクレイピング結果が文字化けしてるんやけど
    • requestパッケージの設定を少しいじると解決
  • でxpath検索できないんやけど
  • lxmlでうまくテキスト取得できないんやけど
    • Beautifulsoupでdom解析

最速でスクレイピングしたいんや

次の条件を満たしてるなら、けっこう簡単にできる

  • スクレイピング対象は認証不要のページ
  • HTML構造が定型化してる
    • 取得対象のデータがJavascriptで取得・・・みたいな感じではない
  • 取得対象のURL一覧がすでにわかってる

次の手順で最速スクレイピングを目指す

  1. Google Chromeのdeveloper consoleを開く。
    1. 目的の情報の上で右クリック -> inspectをしてもOK。むしろ、こちらの方が早い
  2. 対象Domのxpathをコピーする
  3. Pythonスクリプトを書く

ちなみにPythonスクリプトでの構成はこんな感じ

  • HTML取得
    • request
  • HTML解析
    • lxmlとBeautifulsoup
  • 解析結果の保存と中断&再開管理
    • Sqlite3とSqlalchemy

スクレイピング結果が文字化けしてるんやけど

Qiitaの記事に解決策があった。こうする。

rはrequest.get()の結果オブジェクト

これで、だいたいのケースで文字化けは直る。

(まれに文字化けが直らないケースもあるが、頻度は低い)

Beautifulsoupでxpath検索できないんやけど

そもそもBeautifulsoupはxpath検索できない。Stackoverflowでそう回答されてる。

そこで、lxmlを使う。

lxmlでうまくテキスト取得できないんやけど

lxmlでxpathでアクセスした後に、Domを表示する。

DomをBeautifulsoupに解析されてテキストを得る。

おしまい!