[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をフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!