今回はBeautiful Soupを使用してスクレイピングを行ってみます。
以前も同じような内容の記事を書きましたが、
前回と今では理解度に差があるので
それを踏まえて記事として残しておきます。
bs4を使用します。
Pythonのversionは3.7.2です。
今更bs3の記事とか書きませんのであしからず。
Contents
Beautiful Soupとは?
簡潔に言い表すとHTMLファイルからデータを抜き出すためのライブラリです。
インストールの仕方とかはコチラを見て下さい。
Beautiful Soupと他のライブラリの組み合わせ
Beautiful Soupを使用する際、用途に沿って他のライブラリと組み合わせることになります。
- Web上からHTML情報を取得するために使用するrequests
- 正規表現を使用するためのre
- リクエストを連続に投げないためのtime
ひとまずこれだけあれば大体のことができます。
スクレイピングを行った情報をWordpressに投稿する場合はwordpress用のライブラリか、REST_APIを使用する必要があります。
特定のサイトから見出しを取得する
Beautiful Soup 4.2.0 Doc. 日本語訳 (2013-11-19最終更新)
上記のリンクから情報を取得します。
今回は見出しにも使用されている『クイックスタート』という文字列を取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import requests from bs4 import BeautifulSoup # Beautiful Soup 4.2.0 Doc. 日本語訳 url = 'http://kondou.com/BS4/' # HTMLオブジェクト取得 html = requests.get(url) # lxmlでパース soup = BeautifulSoup(html.content, 'lxml') # ページ内のクイックスタートを取得しましょう。 h1 = soup.select_one('div > #id7 > h1') # h1のtextを出力 print(h1.text) # クイックスタート¶ |
bs4のselect_oneという関数はCSSセレクタと言われ、タグの階層構造を
上のコードのようにdiv > #id7 > h1みたいな辿り方をすることができます。
これは欲しい情報がわかっている場合の処理です。
こんな情報取得してもしょうがないという方!?確かにその通りなので
ちょうどいい難しさでちょうどいい内容のサイトがあればスクレイピングをしたいと思います。
requestsモジュールでのSSLエラー
ちょっとはまってしまったので記載しておきます。
SSL認証が必要なページに対してアクセスを行うと、SSLエラーを返されることがあります。
雑な方法ですが、requests.getの引数にverify=Falseを設定すると認証を回避することができます。おすすめはしませんが。
1 |
requests.get(url, verify=False) |
ライブドアブログのニュースを取得してみよう
今までのコードではBeautiful SoupのCSSセレクタを使用していました。
今回はFind_allを使用してh3タグを一気に取得してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import requests from bs4 import BeautifulSoup, NavigableString, Tag if __name__ == "__main__": url = 'https://news.livedoor.com/topics/category/eco/' # HTMLオブジェクト取得 html = requests.get(url) # lxmlでパース soup = BeautifulSoup(html.content, 'lxml') # livedoor newのIT・経済カテゴリ記事見出し h3_list = soup.find_all('h3') for h3 in h3_list: buf = '見出し:' + h3.text for sibling in h3.next_siblings: if isinstance(sibling, NavigableString): buf += sibling elif isinstance(sibling, Tag): if sibling.name == 'p': buf += 'サマリ' + sibling.text print(buf) #見出し:Apple、Google、Amazon、各社投入の音声UI、あれは「誰が聞いている」? #サマリ◆Apple契約会社がSiriとの会話を聞いていた7月の末に、Appleの請負… |
上記のコードでは終了条件を設定していませんが、h3タグは記事に見出しにしか使用されていないようなので問題はなさそうです。
スクレイピングを行う上で大事なこと
スクレイピングを行う上で大事なことは
どのようにスクレイピングを行うのかという事ではなく
スクレイピングしたデータをどのように活用するのか
という事です。
現在ではまとまったデータは非常に価値の高いものになりました。
出来れば取得したデータで一儲けできるような案を考えていきたいものです。