【コード公開】【初心者のPython入門】Webスクレイピング〜テキスト抽出〜





今回は、特定のWebページから記事内テキストの抽出をWebスクレイピングを用いて行う記事となっています。一度、特定のページ内のHTML情報を抽出する記事を投稿しているので、もしよければそちらも一読していただければと思います。
 

汎用性の広いPythonを0から習得するためのフロー及び実際にPythonで開発を行い開発案件を獲得するまでの筋道について解説しているチュートリアル資料と

コーディングの参考となる実際にPythonを使って作ったツールのソースコードを無料で配布していますので、こちらも併せてご覧ください。

初心者・入門者でも30日間で学習できるおすすめPython学習方法

 

おすすめのPython学習サービスをまとめてみました。挫折することなく一直線にエンジニアを短期集中で目指している人はこちらから確認してください。 

【おすすめ】Python学習サイトPyQが初心者に選ばれる理由

プログラミングを学ぶ上で作りたいものがない人へ提案させてください

 

プログラム概要

今回の本プログラムは、特定のURLを指定してそのWebページから情報を抽出します。実際にWeb情報を取得すると、HTMLタグ付きの状態で情報を抜き取るわけですが、無駄な部分を省くことを考慮して、記事内テキストを抽出していきます。
 
 
・モジュールのインポート
・特定URLからデータ取得
・取得データの解析
・解析データから記事内テキスト抽出
 
 
本プログラムは上記の流れで説明していきます。
 
 

必要なモジュールのインストール

 
 
今回の本プログラムで利用するモジュールは、BeautifulSoupとrequestです。
 
 
BeautifulSoupモジュールは、pythonのライブラリの一つでスクレイピングに特化した機能を備えています。
スクレイピングは、端的に言うと取得したHTMLから任意の情報を抽出する技術を指します。
 
 
requestモジュールは、HTTP通信を行うためのライブラリに特化した機能を備えています。
WebサーとのダウンロードやRESTAPI等の利用が比較的簡単に行うことができます。
このモジュールを利用して特定URLに対してリクエストを行い、結果を取得します。
 
 
from bs4 import BeautifulSoup
import urllib.request as req
 
 

urlopen()でデータを取得する

 
 
url = "https://su-gi-rx.com/2018/03/28/text-mining-2/"

# urlopen()でデータを取得
res = req.urlopen(url)
 
 
ここでは、まず任意の特定URLを変数urlに代入して利用します。
req.urlopen()を利用して、特定URLから結果を取得し、変数resに格納しています。
 
 

BeautifulSoup()で取得データを解析

 
 
# BeautifulSoup()で解析
soup = BeautifulSoup(res, 'html.parser')
 
 
ここでは、先ほど取得したデータを格納した変数resを利用します。
BeautifulSoupモジュールを利用して、取得データをHTML情報を解析し、そのデータを変数soupに格納しています。
 
 

任意のデータを抽出する

 
 
# 任意のデータを抽出
title1 = soup.find("h1").string
print("title = ", title1)

p_list = soup.find_all("p")

for p in p_list:
	print(p.get_text())
 
 
ここでは、変数soupの解析後データを利用して任意のデータを抽出します。
タイトルと記事内テキストを囲っているHTMLタグのみのデータを取り出していきます。
 
 
この時、解析で利用したBeautifulsoupのメソッドとして、find()メソッドとfind_all()メソッドを利用していきます。
 
 
BeautifulSoupモジュールのfind()とfind_all()は、このモジュールの中でも最も利用するメソッドでしょう。
これらを利用することで、HTML情報から様々な属性に基づいて、目的のタグやタグのリストを見つけ出すことができます。
 
 
メソッドを利用して抽出したデータをfor文にて、ターミナル上で出力するコードを追加しています。
 
 
# python3
# bs-select-2.py

from bs4 import BeautifulSoup
import urllib.request as req

url = "https://su-gi-rx.com/2018/03/28/text-mining-2/"

# urlopen()でデータを取得
res = req.urlopen(url)

# BeautifulSoup()で解析
soup = BeautifulSoup(res, 'html.parser')

# 任意のデータを抽出
title1 = soup.find("h1").string
print("title = ", title1)

p_list = soup.find_all("p")

for p in p_list:
	print(p.get_text())
 
 

出力結果

 
 
 
 
特定URLをうまく利用することで、サイト内のリンクの記事などを巡回してデータ取得するクローリングにも活用できるかと思います。
 
 

実務に活かす際に学習として利用していたPython本が以下のものになります。

・PythonによるWebスクレイピング(オライリー出版)

・増補改訂Pythonによるスクレイピング&機械学習 開発テクニック(クジラ飛行机)

・Pythonクローリング&スクレイピング – データ収集・解析のための実践開発ガイド



ABOUTこの記事をかいた人

sugi

大学卒業後、IT企業に就職を果たす。システム開発・人工知能に触れながら大手企業と業務をこなす。2年半後脱サラし、フリーランス活動経験を経て 2019年2月から起業し、今に至る。 自社サービス及び製品を開発、ブログ収入、クラウドソーシングなど、多方面で売り上げを立てている。