サーラリマンは働き過ぎ、社畜化に注意しよう!!

python BeautifulSoup

python
スポンサーリンク

BeautifulSoup公式サイト

自動でデータを収集する方法

requests モジュールでhtmlソースを取ってくる。
BeautifulSoup4 モジュールでソースを整形する。

Beautiful Soup 4.2.0 Doc. 日本語訳 (2013-11-19)

日本語解説

Beautiful Soupはpythonで動作するHTMLとXMLのパーサーです。Beautiful Soupはパースしたツリーの操作、検索、変更を簡単に、かつ、今までと同じ方法でできます。これにより、プログラマーの仕事時間を節約します。

Beautiful Soup 4 Python
Overview This article is an introduction to BeautifulSoup 4 in Python. If you want to know more I recommend you ...

 

PythonでWebクローリングを行うには、主に以下2ステップを行います。

  1. 指定したURLのHTMLを取得する
  2. 取得したHTMLから必要な情報を読み込む

指定したURLからのHTML取得には、urllib.requstを利用します

import urllib.request
url= "http://www.yoheim.net/"
response= urllib.request.urlopen(url)
html= response.read().decode("utf-8")
HTMLを取得できたら次にHTMLを解釈して必要なデータを取り出します。

from bs4import BeautifulSoup
soup= BeautifulSoup(html, "html.parser")
article= soup.find(class_="articleList")
h2_list= article.find_all("h2")
titles= [h2.string for h2in h2_list]
これで値の取得ができました。手順としては以下の流れとなります。
  1. BeautifulSoupオブジェクトを生成する
  2. findfind_allを使って、HTML要素を取得する
  3. .stringなどで値を抽出する

ここは決まり文句のようなつもりで、以下でインスタンス化できます。

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
301 Moved Permanently

 

 

python
スポンサーリンク
シェアする
ふじやんをフォローする
なんでもDIY

コメント