Python: Requests-HTML の使い方

TwitterFacebookHatena
  • 公開:2021-11-26
  • 更新:2023-10-26
  • 文章量:5003
  • Python

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 スクレイピングがより簡単になるでしょう。本記事が皆さんの参考になれば幸いです。

Python: Requests-HTML の使い方