hkのweblog

ひよっこエンジニアがにわとりになるまでの軌跡

Bingの検索結果をcsvで出力するPythonスクリプトを書いた

先日、とあるwebメディア制作の会社から、「地域名×キーワード」でGoogle検索結果上位50件をcsvにまとめてほしいという依頼を受けました。
その時書いたPythonスクリプトをメモがてら公開します。

Pythonを書くのは久しぶりで細かい改善の余地はありそうですが、とりあえずこれで用は足りるだろうという程度のものです。
苦戦したポイントがいくつかあったのであげておきます。

GoogleとYahooはスクレイピングに厳しかった

最初はGoogleの検索結果ページ用のものを書いていたのですが、しばらくやっているうちに大量リクエストを検知されたようでIP制限をかけられてしまいました。
こうなると検索毎にreCaptchaのチェックを求められるので為す術がありません。
リクエストの間にランダムで5~10秒スリープする処理を入れたりもしてみたのですが、あまり効果はありませんでした。

Yahooに至っては最初のリクエストから弾かれてしまいました。
ということで、Googleで検索しきれなかった分についてはBingで処理しました。
Bingは優しいのかな?よく分かりませんが、スクレイピング自体グレーな行為ではあるので利用は常識的範囲に留めておきたいものです。

全角チルダ波ダッシュ問題

出力したcsvExcelで開いたときに文字化けしないように、Shift JISで出力するのですが、Shift JISに置き換えられない文字が結構ありました。
こちらの記事は代表例ですが、他にも色々引っかかるみたいです。 qiita.com

L68,71あたりで諦めています。

URL長すぎ問題

特に日本語がURLエンコードされた場合に顕著ですが、Excelの1セルにURLが収まらないことがありました。
そこでbit.lyを使って長過ぎるURLは短縮する処理を入れています。
余談ですが、古めのMacExcelではHYPERLINKがうまく機能しない場合があるようです。こちらは良い解決策が見つけられませんでした。

最後に使ったスクリプトを載せます。