robobrowser
https://github.com/jmcarp/robobrowser
Pythonでwebスクレイピングを行うためのライブラリです。
セッション部分にはrequestが、HTML部分にはbeautifulsoupが内部で対応しています。
とてもコードは書きやすいですが、robobrowser==0.5.3ではjavascriptに対応できておらず、またここ5年間更新もされていないので、特にこだわりがなければ、他のライブラリを使う方が良いと思います。
今回は、 https://pypi.org/で、 ‘robobrowser’を検索してみて、プロジェクトが何件検索で出てくるかを調べてみます。
インストール
pipでrobobrowserをインストールします。
$ pip install robobrowser
必要なモジュールのインポート
robobrowserとreをインポートします。
>>> import re >>> from robobrowser import RoboBrowser
robobrowerオブジェクトの生成
robobrowserオブジェクトを生成して、 https://pypi.org/のページを開きます。
>>> br = RoboBrowser()
>>> br.open('https://pypi.org/')
>>> br
‹RoboBrowser url=https://pypi.org/›
フォームの入力と検索
フォームに検索文字を入力し検索、検索結果のページへ遷移するコードを書きます。
ブラウザで実際にhttps://pypi.org/を開いてみて、chromeの検証ツールを使ってhtmlの構造を把握し、その情報を基にコードを書きます。
>>> form = br.get_form(action="/search/") >>> form ‹RoboForm q=› >>> form['q'].value = 'robobrowser' >>> form ‹RoboForm q=robobrowser› >>> br.submit_form(form) >>> br ‹RoboBrowser url=https://pypi.org/search/?q=robobrowser›
検索結果のparseと目標文字列の取得
検索結果のページをparseし文字列に変換後、目標の文字列を正規表現で取得します。
ブラウザで実際に検索を行い、chromeの検証ツールを使ってhtmlの構造を把握し、その情報を基にコードを書きます。
>>> results_parsed = br.parsed
>>> results_parsed
# htmlが表示される。とても長いので省略。
>>> src = str(results_parsed)
>>> src
# htmlを文字列に変換したものが表示される。とても長いので省略。
>>> start = '‹p›\n‹strong›'
>>> end = '‹/strong›\n projects\n'
>>> result = re.search('{}(.*){}'.format(start, end), src).group(1)
>>> result
'6'
無事に目標の数字を取得することができました。