TL;DR
Requests-HTML は、Web スクレイピングを簡単に操作にするモジュールである。HTML のパースなどページを取り出して目的の要素を処理する。Requests-HTML の作者である Kenneth Reitz 氏 は、HTTP クライアントインターフェースとして広く使われている Requests モジュールの作者でもある。設計はクリーンだ。Requests-HTML は、ページに含まれているすべてのリンクやコンテンツ全体の他、HTML 要素の属性を知ることができる。作者の github psf/requests-htmlによると、次の情報を得ることができると書かれている。
- JavaScript サポート
- CSS セレクター
- XPath セレクター
- 模擬ユーザーエージェント
- リダイレクトの自動フォロー
- 接続プール
- Cookie の永続性
- 非同期サポート
インストール コマンド
pipenv install requests-html
colab にはプリインストールされていない。colab 上でインストールする場合は次のコマンドをコードセルに入力する。
!pip install requests-html
CSS セレクタを見つける
ターゲットのスクレイピング先に記述された html ソースコードがこちらだったとする。
<h2 class="title">httpbin.org
<small>
<pre class="version">0.9.2</pre>
</small>
</h2>
find()
find() メソッドの中で要素名を指定することにより html の中に記述されたセレクタを見つけることができる。id でも クラス名でも指定可能。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://httpbin.org/')
id_name = r.html.find('.title', first=True)
print(id_name)
# first=True
#
about:
Requests-HTMLを使い、Webスクレイピングを簡単に操作する方法を説明しています。HTMLのパースやページ要素の処理、JavaScriptサポート、CSS、XPathセレクターなどについて、さまざまなメソッドやコマンドを紹介しています。
以下、Markdown形式です:
```markdown
---
id: '7628'
title: 'Python: Requests-HTML の使い方'
date: '2021-11-26'
description: 'この記事では、PythonのRequests-HTMLモジュールを用いてWebスクレイピングを簡単に操作する方法について解説します。'
tag: [python]
posttype: 'blog'
---
Requests-HTML は、Web スクレイピングを簡単に操作にするモジュールである。HTML のパースなどページを取り出して目的の要素を処理する。
Requests-HTML の作者である Kenneth Reitz 氏 は、HTTP クライアントインターフェースとして広く使われている [Requests](https://github.com/psf/requests) モジュールの作者でもある。設計はクリーンだ。
Requests-HTML は、ページに含まれているすべてのリンクやコンテンツ全体の他、HTML 要素の属性を知ることができる。
作者の github [psf/requests-html](https://github.com/psf/requests-html)によると、次の情報を得ることができると書かれている。
- JavaScript サポート
- CSS セレクター
- XPath セレクター
- 模擬ユーザーエージェント
- リダイレクトの自動フォロー
- 接続プール
- Cookie の永続性
- 非同期サポート
### インストール コマンド
```python
pipenv install requests-html
colab にはプリインストールされていない。colab 上でインストールする場合は次のコマンドをコードセルに入力する。
!pip install requests-html
CSS セレクタを見つける
ターゲットのスクレイピング先に記述された html ソースコードがこちらだったとする。
<h2 class="title">httpbin.org
<small>
<pre class="version">0.9.2</pre>
</small>
</h2>
find()
find() メソッドの中で要素名を指定することにより html の中に記述されたセレクタを見つけることができる。id でも クラス名でも指定可能。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://httpbin.org/')
id_name = r.html.find('.title',
to save space ...
```python
id_name = r.html.find('.title', first=True)
print(id_name.text)
# httpbin.org
# 0.9.2
.find() メソッドのパラメータ一覧と find()メソッドの記述例は表で示されています。.attrs をつけると、class 名や id 名などの属性を表示できます。
URL に関する処理
次のコードは URL に関する情報を返します。.html.links にすると、リンクのリストを取得するが、.html.absolute_links は、ページ上のすべてのリンクのリストを絶対形式で取得します。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://httpbin.org/')
print(r)
# <Response [200]>
print(r.html.url)
# https://httpbin.org/
print(r.html.absolute_links)
# {''https://github.com/...', 'https://httpbin.org/...', ...}
メソッド一覧
メソッド一覧は以下の表で示されています。
記述法 | 対象 |
---|---|
r.html.links() | リンク |
r.html.absolute_links() | 絶対形式のリンク |
r.html.find() | CSS セレクタ |
r.html.base_url() | ベースとなる URL |
r.html.render() | JavaScript 取得 |
そして以下の表には、様々な情報を取得する方法が示されています。
記述法 | 取得 |
---|---|
xxxx.text | テキストコンテンツ |
xxxx.full_text | 全文コンテンツ |
xxxx.attr | 属性(class 名や id 名) |
xxxx.html | HTML |
xxxx.absolute_links | リンク |
xxxx.search | テキスト検索 |
xxxx.xpath | XPath |
title を取得する
メタ情報のタイトルは、head > title で取得できます。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://ja.wikipedia.org/')
id_name = r.html.find('head > title', first=True)
print(id_name.text)
# Wikipedia
要素内の文章を抽出
.text パラメータをつけることで、要素内のテキストを抽出できます。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://httpbin.org/')
id_name = r.html.find('.title', first=True)
print(id_name.text)
# httpbin.org
# 0.9.2
.full_text は全文コンテンツを取得します。余白と改行はそのまま表示されます。
掘り下げて検索
結果に、.find をつけて、掘り下げて目的の要素を探すことができます。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://httpbin.org/')
id_name =
r.html.find('.title', first=True)
print(id_name.find('small > .version', first=True).text)
# 0.9.2
要素を検索
.search メソッドを使うと、文字列のパターンに一致する情報を探すことができます。探したい情報を "{}" で囲むと、その情報が出力されます。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://httpbin.org/')
id_name = r.html.find('.title', first=True)
print(id_name.search('httpbin.org{}'))
# {'': '\n \n 0.9.2\n '}
JavaScript の取得
r.html.render() をつけると JavaScript で動的に生成される情報も取得できます。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://httpbin.org/')
r.html.render()
print(r.html.search('httpbin.org{}'))
# {'': '\n \n 0.9.2\n '}
XPath の利用
.find メソッドを使って XPath を利用することも可能です。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://httpbin.org/')
result = r.html.xpath('//title')
print(result[0].text)
# httpbin.org
以上、Requests-HTML の基本的な使い方について説明しました。これを使えば、Web スクレイピングがより簡単になるでしょう。本記事が皆さんの参考になれば幸いです。