BeautifulSoup4の基本的な使い方
みなさまおはこんばんにちは、せなです
今回はPythonを使用したスクレイピングで役立つ外部ライブラリの「BeautifulSoup4」の使い方を紹介したいと思います
BeautifulSoup4のインストール
インストールには以下のコマンドを使用します
pip install bs4
※「pip install beautifulsoup4
」でもインストールできます
BeautifulSoup4のパーサーについて
パーサーとは「BeautifulSoup(markup, 'html.parser')
」html.parserのことを指します
BeautifulSoup4はいくつかのパーサーに対応しています
Pythonで標準搭載されているHTMLパーサーにも対応していますが、より高速での動作を期待したい場合やPythonのverが3.2.2以前の場合には以下のパーサーのいずれかをインストールする必要があります
- lxml : pip install lxml
- html5lib : pip install html5lib
lxmlはHTML以外にもXMLに唯一対応しており、標準ライブラリよりも高速で動作します
html5libはBeautifulSoup4に対応していて、HTML5などにも対応していますが、動作が遅いです
今回はPython標準搭載のパーサーを使用します
BeautifulSoup4でよく使うメソッド:find(),find_all()
from bs4 import BeautifulSoup
import requests
url = 'https://www.google.co.jp/search?hl=ja&num=10&q=BeautifulSoupドキュメント'
html_res = requests.get(url)
soup = BeautifulSoup(html_res.text, 'html.parser')
print(soup.prettify())
soup.find('div', class_='BNeawe UPmit AP7Wnd')
soup.findAll('div', class_='BNeawe vvjwJb AP7Wnd')
----結果(一部)----
....
<div class="kCrYT">
<div class="BNeawe vvjwJb AP7Wnd">
</div>
<div class="BNeawe UPmit AP7Wnd">
</div>
</a>
</div>
prettify()
メソッドは取得したデータをきれいに整形して出力することができますprettify()
メソッドを使用することでfind()
メソッドなどでどこをフィルターに設定するかを調べることができます
soup.find('div', class_='BNeawe UPmit AP7Wnd')
----結果----
<div class="BNeawe UPmit AP7Wnd"></div>
find()
メソッドは最初に一致した結果のみを返却します
find()
メソッドの引数は次のようになります(name, attrs, recursive=True, text, **kwargs
)
上のソースコードだと「'div'
」がnameで「class_='BNeawe UPmit AP7Wnd'
」がattrsに当たります
※classにアンダースコア(_)が付いているのはPythonの予約後にclassが存在するためです
※「'BNeawe UPmit AP7Wnd'
」はprettify()
メソッドで取得したデータの中にあるCSSクラス名のことです
soup.findAll('div', class_='BNeawe vvjwJb AP7Wnd')
----結果一部----
[<div class="BNeawe vvjwJb AP7Wnd">...]
find_all()
メソッドは一致したすべての結果を返却します
find_all()
メソッドの引数は次のようになります(name, attrs, recursive=True, text, limit, **kwargs
)
find()
とfind_all()
の引数の内容は以下のようになります
- name = タグ名
- attrs = CSSクラス名
- recursive = 子クラスの探査有無(デフォルトTrue)
- text = タグの間の文字列を検索
- limit = 返却結果の最大数指定
- kwargs = どんな名前のタグでも検索に使用できる
最後に
最も使用頻度が高いであろうfind()とfind_all()の説明を行わせていただきました
私もあまり使いこなせていないので説明が雑な気がします
ここまで読んで下さり、ありがとうございました
ではでは~
ディスカッション
コメント一覧
まだ、コメントがありません