10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonでスクレイピングしてみた

Last updated at Posted at 2017-07-04

今回はBeautifulSoupを使っていきます。
python 3.6.0
BeautifulSoup 4.6.0

ドキュメントはコチラ
英語
http://www.crummy.com/software/BeautifulSoup/bs4/doc/

日本語
http://kondou.com/BS4/

##インストール

$ pip install beautifulsoup4

##とりまBeautifulSoupを実行
このページのデータを取ってきてh1タグの中身を表示するプログラムです。
https://pythonscraping.com/pages/page1.html

from urllib.request import urlopen
from bs4 import BeautifulSoup 
html=urlopen("https://pythonscraping.com/pages/page1.html")
bsobj=BeautifulSoup(html.read())

print(bsobj.h1)

このままでは、webページが見つからなかったり、予期せぬデータフォーマットでスクレイパーがエラーを吐いたりするので、例外処理を書いておくべきです。

##エラー対策

html=urlopen("https://pythonscraping.com/pages/page1.html")

この行はページが見つからないとエラーになってしまいます
なので、以下のように書き換えます。

try:
	html=urlopen("https://pythonscraping.com/pages/page1.html")
except: 
	print("ページが見つかりません")

またこの行でもエラーが起きる可能性があります

bsobj=BeautifulSoup(html.read())

このように書き換えました。

try:
    bsobj=BeautifulSoup(html.read())
    print(bsobj.h1)
except:
    print("error")

##目的のタグを見つける
find()とfindAll()を使うことで目的のタグを見つけることができます
次のコードは<span class="green"></span>内のテキストを表示します

span_list = bsobj.findAll("span",{"class":"green"})

class="green"だけでなくclass="red"も表示したい場合は次のように書き換えます。

span_list = bsobj.findAll("span",{"class":{"red","green"}})

##タグを取り除く

span_list = bsobj.findAll("span",{"class":"green"})
for i in span_list:
    print(i)

このコードでは<span class="green"></span>のテキストを表示しますがタグも一緒に表示されてしまいます
中のテキストだけ欲しい場合は次のように書き換える必要があります

#タグも一緒に表示
print(i)

#タグ無しで表示
print(i.get_text)
10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?