WebスクレイピングができるPython用ライブラリ「requests-html」



高機能なWebスクレイピングができる Python用のライブラリ「requests-html」の紹介です。

requests-html で出来ること 

- Webスクレイピングをするライブラリですが、ページ情報を取得する際に HTML要素のセレクターを指定することもできます

* 要素セレクター  (クラスや idなど)を指定して特定部分を抜き出すことが簡単にできます


requests-html のインストール

 requests-html は プロジェクトルート上から ' pip ' をコマンドを使ってインストールします。また、 プロジェクトで依存関係を指定している場合は ' pipenv ' を使うことも可能です。

# pip
pip install -U requests-html
# pipenvを使う場合
pipenv install requests-html


requests-html の使い方

requests-html はモジュールを読み込んだ後、わずかなコードで使うことが出来ます。

 下のコードは、 ' http://co.bsnws.net/article/269 ' (このサイト) 内のページ全体のテキストを抜き出した後、HTMLタグを除去してテキスト形式に変換しています。

from requests_html import session # requests_htmlの読み込み

# ターゲットなるURL
url = 'http://co.bsnws.net/article/269'
# ページに接続
response = session.get(url)
# 取得したオブジェクトをhtmlに変換
article = response.html
# ページをtextに変換
print(article.text)
# ページをhtmlタグに変換
# print(article.html) 


 上のスニペットのようにページ全体を抜き出すような処理は 珍しい事ではありませんが、 requests_html は jQueryを使って 要素のセレクターを指定するように、部分的に絞りだすことができます

* 下のコードは idを指定し、 このサイト ' http://co.bsnws.net/article/269'  のコンテンツ部分のみを抜き出しています

from requests_html import session

url = 'http://co.bsnws.net/article/269'

response = session.get(url)
# findメソッドを使って、id="article_content" を指定して取得
# * first=True オプションが無い場合、'list' 形式で値が返ってきます
article = response.html.find('#ariticle_content', first=True)
# 要素を明確に指定する場合
# response.html.find('#ariticle_content > p ')

print(article.text)

""" output
設定なしにバンドルファイルが作成できるビルドツール「Parcel」の紹介です。
Webページで css や javascript などを " .min.* " などの1ファイルにバンドルすることは、今や よくある事の 1つです。
* バンドルファイルを作成するイメージ
webpack を使ってバンドルファイルを作成する為には、それぞれのファイル & タイプにあったプラグインが必要になり、特に画像やフォントなどが入った CSS Framework
のテンプレートとなるとルールの記述も長くなる傾向にあります。

....

"""


 取得したページ情報に、" absolute_links " オブジェクトを指定すると、" ページの特定要素内で使われているURLリンクを取得する " なんてことも簡単にできます。

from requests_html import session

url = 'http://co.bsnws.net/article/269'

response = session.get(url)
# findメソッドを使って、id="article_content" を指定して取得
# * first=True オプションが無い場合、'list' 形式で値が返ってきます
article = response.html.find('#ariticle_content', first=True)

print(article.absolute_links)

''' output
* set オブジェクトで値が返ってきます
{'http://co.bsnws.net/article/244', 'https://github.com/parcel-bundler/parcel'}
'''


Summary

 requests_html は細かい事が出来るので、スクレイピングだけにとどまらず、クローラーに近い機能も 手早く作ることができそうです。また、テキストの加工の工数も大幅に短縮できそうです。

GitHub : kennethreitz/requests-html

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ