webスクレイピングをするためのpythonのrequests-htmlの使い方を説明したいと思います。
webスクレイピングを行うには「Beautiful soup」,「Pyppeteer」,「requests」,「PyQuery」などを利用する方法がある。しかし「requests-html」はこれらの機能が入っているライブラリであるためこれ一つでほとんどの作業ができてしまう。
準備
PCはwindowsを利用する。Macの方ごめんなさい、Macを持っていないのでわからないです…。pythonのバージョンとpipのバージョン
>python -V
Python 3.9.1
>pip -V
pip 21.0.1
特に理由のない方はこれらのバージョンをアップデートしておこう。
インストール
requests-htmlのインストール
コマンドプロンプトに以下のコマンドを入力すればインストールが完了する
pip install requests-html
使用方法
実際にrequests-htmlをどのように使うかを説明していく。
GETリクエストを要求
from requests_html import HTMLSession
session = HTMLSession()
url = "https://it-syoya-engineer.com/hello-world/"
r = session.get(url)
r.htmnl.render()
まずはじめにrequests-htmlを利用するためimport文を書く。
利用するページはこのブログ開設時にはじめからあった投稿のページを利用する。
“session.get(url)”でページに対してGETリクエストを要求している。
最後の行を書くことによりブラウザで表示されるHTMLの内容を生成させます。
これで得たGETリクエストを利用していく。実行結果を書いてしまうと長くなってしまうので一部省略します。
ページ内の全てのリンク
r.html.links
絶対形式のページで見つかった全てのリンク
r.html.absolute_links
ページのベースURL
r.html.base_url
=>'https://it-syoya-engineer.com/hello-world/'
HTMLおよびHTMLResponseヘッダーから抽出された、使用されるエンコード文字列
r.html.encoding
=>'utf-8'
要素またはHTMLの全文コンテンツ(リンクを含む)
r.html.full_text
HTMLコンテンツのUnicode表現
r.html.html
要素またはHTMLのPyQuery表現
r.html.pq
=>[<html>]
HTMLコンテンツのバイト表現
r.html.raw_html
指定された解析テンプレートの要素を検索
r.html.search(str型)
要素またはHTMLのテキストコンテンツ
r.html.text
CSSセレクターを指定し、Elementオブジェクトのリストまたは単一のオブジェクトを返却
r.html.find(selector,containing,clean,first,_encoding)
引数 | 内容 | 引数の型 |
selecttor | 使用するCSSセレクター | str型 |
clean | 見つかったタグと<style>タグのHTMLをサニタイズするかどうか</p> | bool型 |
containing | 指定した場合、提供されたテキストを含む要素のみを返す | str型またはlist型 |
first | 最初の結果だけを返すかどうか | bool型 |
_encoding | エンコード形式 | str型 |
CSSセレクターの指定方法はについてはを参考にしてください。
findで得た要素に対して更に要素を検索することができる
#タグがdivの最初の要素を取得
div = r.html.find('div',first=True)
#更にその要素内のタグがaの要素を取得
div.find('a')
また、今回紹介したものはfindで得た要素に対しても使うことができる。
#タイトルを表示させる
title = r.html.find('title',first=True)
title.text
=>'Hello world! | エンジニアによるブログ'
最後に
この記事では「requests-html」の使い方を簡単に説明しました。
webスクレイピングはquests-html一つで簡単にプログラムが書けると思いました。
次は実際にこれを使ってプログラムを書いてみたいと思います。