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'
無事に目標の数字を取得することができました。