[Python] httplibとBeautifulSoupを用いてWebクローリングを行い、データを収集する
こんにちは、@yoheiMuneです。
今日はPythonでWebクローリングを行って、Web上からデータ収集する方法をブログに残したいと思います。
なお、Post通信で取得する必要があったり、認証が必要なページを取得する場合などは、以下のブログをご参照ください。
- [Python] HTTP通信でGetやPostを行う
- BeautifulSoupの公式ページ(英語)
本ブログでは、フロントエンド・Python・機械学習を中心に発信していきます。気になった方はぜひ、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
今日はPythonでWebクローリングを行って、Web上からデータ収集する方法をブログに残したいと思います。
目次
事前準備
PythonでWebクローリングを行うには、主に以下2ステップを行います。- 指定したURLのHTMLを取得する
- 取得したHTMLから必要な情報を読み込む
$ pip install --upgrade beautifulsoup4無事にインストールができたら準備完了です。
指定したURLからHTMLを取得する
指定したURLからのHTML取得には、urllib.requstを利用します。具体的には以下のようにしてHTMLを取得します。
import urllib.request
url = "http://www.yoheim.net/"
response = urllib.request.urlopen(url)
html = response.read().decode("utf-8")
これでhtmlを取得できればHTML取得の完成です。urlの部分を必要なものに変えれば良いです。なお、Post通信で取得する必要があったり、認証が必要なページを取得する場合などは、以下のブログをご参照ください。
- [Python] HTTP通信でGetやPostを行う
HTMLを読み込んで必要な情報を得る
HTMLを取得できたら次にHTMLを解釈して必要なデータを取り出します。上記で取得した本サイトトップページでは、最新記事が一覧で表示されていますので、ここではそのタイトルを取得したいと思います。
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
article = soup.find(class_="articleList")
h2_list = article.find_all("h2")
titles = [h2.string for h2 in h2_list]
これで値の取得ができました。手順としては以下の流れとなります。- BeautifulSoupオブジェクトを生成する
findやfind_allを使って、HTML要素を取得する.stringなどで値を抽出する
BeautifulSoupの使い方
上のようにBeautifulSoupを使うことで、HTMLを解釈して必要な情報を得ることができます。上記で紹介した3ステップに分けて使い方を紹介させていただきたいと思います。なおBeautifulSoupの公式ページは以下ですので、そちらもご参照ください。- BeautifulSoupの公式ページ(英語)
BeautifulSoupオブジェクトの生成
ここは決まり文句のようなつもりで、以下でインスタンス化できます。soup = BeautifulSoup(html, "html.parser")
必要なHTML要素の抜き出し
HTML要素を抜き出すために、以下のような仕組みが用意されています。
### 条件に一致する要素を1つ取得する(find)
# HTML要素名
h1 = soup.find("h1")
# クラス名
article = soup.find(class_="articleList")
# ID
header = soup.find(id="header_subtitle")
### 条件に一致する要素を全て取得する(find_all)
# HTML要素名
h2 = soup.find_all("h2")
# クラス名
balls = soup.find_all(class_="ball")
# ID
header = soup.find_all(id="header_subtitle")
# findやfind_allは連ねることもできる
items = soup.find(class_="articleList").find_all("h2")
上記のメソッドを駆使して必要な要素までたどり着きます。要素から値を抜き出す
必要な要素までたどり着いたらあとは値を抜き出します。
# <h2>タイトルタイトル</h2>
title = h2.string
print(title) # => タイトルタイトル
# <img src="/image/390.jpg" alt="画像"/>
img = soup.find("img")
src = img["src"]
print(src) # => /image/390.jpg
主にこの2つを用いてデータを抜き出していきます。以外と単純明解で使いやすいなーと思ってます。最後に
今日は、PythonでWebクローリングをして必要な情報を抜き出す方法をブログに書きました。WebクローリングができるようになるとWebに散らばる様々な情報を得ることができるようになるので、夢がかなり広がります。クローリングマニアが存在する理由がすんごくわかる気がしますw。本ブログでは、フロントエンド・Python・機械学習を中心に発信していきます。気になった方はぜひ、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!






