みなさん,こんにちは。
シンノユウキ(shinno1993)です。
今回はPythonを用いて,URLからWebページの本文を取得する方法を紹介したいと思います.使用するライブラリは,以下の2つです:
・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の結果は以下のようになります:
変数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は以下のブログ記事です.
このコードを実行すると以下のような内容が出力されます.
シンノユウキ(@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つのライブラリは非常にオススメです!ぜひ活用してみてください!