【Python】BeautifulSoupとRequestsでURLから本文を取得する

みなさん,こんにちは。
シンノユウキ(shinno1993)です。

今回はPythonを用いて,URLからWebページの本文を取得する方法を紹介したいと思います.使用するライブラリは,以下の2つです:

・BeautifulSoup
・Requests

こららのライブラリを使用することで,簡単にURLから本文を取得することができます.

では行きましょう!

ライブラリの紹介

BeautifulSoup

「Beautiful Soup」はHTMLやXMLなどのソースから特定のデータを抽出するために使われるPythonのライブラリです.他にも同じような機能をもっているライブラリはありますが,その中でも格段に使いやすいと感じています.

公式のドキュメントは以下です.

このライブラリを使用することでHTMLなどから特定のテキストやリンクを取得したりできます.Web上の情報を集める(Webスクレイピングする)際などには非常に重宝するライブラリです.

しかし,そのためには,HTMLなどのソースを入手する必要があります.しかし,BeautifulSoupにその機能ありません.そこで,次に紹介するRequestsを使用することをオススメします.

Requests

「Requests」はHTTPリクエストを行うためのライブラリです.Pythonでも標準でurllibを使用することで同様のことは実装可能ですが,こちらのライブラリを使うとより簡潔にコードを書くことができます.

HTTPリクエストを行うことで,URLからHTMLファイルなどを取得することができます.かなり汎用的で,今回使う用途以外にも多くの場面で活躍してくれることでしょう.

公式サイトは以下です.

 

簡単な使い方

では,簡単な使い方を紹介していきます.

BeautifulSoup

では,まずはサンプル・コードから.

html = """
<html><head><title>Title</title></head>
<body>
  <p>text</p>
</body>
"""

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
text = soup.body.p.get_text()
print(text)

printの結果は以下のようになります:

text

変数htmlにはその名の通り,htmlのソース・コードを挿入しています.中身はシンプルなものです.

9行目でBeautifulSoupのインスタンスをhtmlから作成し,

10行目でbodyタグのp要素からテキストのみを取得しています.非常に直感的で簡単ですよね.

Requests

こちらもサンプルコードから.

import requests as req
url = 'https://www.y-shinno.com/'
html = req.get(url).content

urlを指定し,getリクエストを送っている例です.

このように,非常にシンプルにHTTPリクエストを送信することができます.

 

実例

では,これらのライブラリを使って,今回の主題,ブログの本文の取得を行ってみましょう.

以下のようなコードになります.

from bs4 import BeautifulSoup
import requests as req

url = 'https://www.y-shinno.com/vgg16-finetuning-uecfood100/'
html = req.get(url).content
soup = BeautifulSoup(html, 'html.parser')
text = soup.find(class_='entry-content').get_text()
print(text)

ちなみに,こちらで指定しているURLは以下のブログ記事です.

【Python/Keras】VGG16をFine-tunignして100種類の食事画像を認識してみよう!【UECFOOD-100】
以前の記事でVGG16を用いて画像を認識・分類する方法を紹介しました。 しかし栄養士である私としては,やはり食事画像認識をやりたいなーと思っていまいた。 ということで,VGG16をFine-tuningし,食事画像を認識できるようなプログラ...

このコードを実行すると以下のような内容が出力されます.

みなさん,こんにちは.
シンノユウキ(@y_stadio)です.
以前の記事でVGG16を用いて画像を認識・分類する方法を紹介しました.
VGG16という...www.y-shinno.com2018.09.14みたいと思います.理論などの説明は割愛し,道具としてこれを使えるようになることを目指します.では行きましょう!
しかし,本ブログのテーマの1つは「栄養×ICT」.やはり食事画像認識をやりたいなー,ということで,VGG16をFine-tuningし,食事画像をしっかりと認識できるようにしたいと思います.なおデータ・セットにはUECFOOD-100を使用しています.
では行きましょう!

目次1 開発環境を整えよう!1.1 開発環境は「Google Colab」を想定1.2 必要なライブラリなどをインポートしよう!2 画像データを準備しよう!2.1 まずはデータをダウンロードしよう!2.2 画像をトリミングしよう!2.3 画像をトレーニング用とテスト用に分類しよう!3 モデルを構築しよう!4 モデルに画像を学習させていこう!4.1 まずは学習の準備から!4.2 いよいよ学習!5 実際に画像を認識してみよう!5.1 ちょっと準備を...5.2 画像の認識・分類結果を表示しよう!6 まとめ

途中までですが,テキストの内容がしっかりと出力されていますね.ちなみに
text = soup.find(class_='entry-content').get_text()

とすることで,htmlの中から'entry-content'が含まれる部分を抽出し,その中からテキスト部分のみを取得しています.

今回のURLはWordPressで,WordPressの場合は,本文は'entry-content'の中に格納されています.なので,そこを指定し,取得したというわけなのですね.

 

まとめ

これで,URLから本文を取得する事ができました!設定をいろいろと変更することで,様々なスクレイピングが可能になりそうですね!BeautifulSoupとRequestsの2つのライブラリは非常にオススメです!ぜひ活用してみてください!

 

タイトルとURLをコピーしました