ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

【Python2.7】BeautifulSoupで(個人的に)よく使うコードをメモ

といっても、初歩的な初歩なんですけども。。。

準備

from bs4 import BeautifulSoup

これでおk。まだインストールしていないならpipでインストールしてね。

今回はurlからデータを取得してそれをBeautifulSoupへ渡す。

import requests

response = requests.get('http://www.yahoo.co.jp')
soup = BeautifulSoup(response.text)

おk。

ちなみに、htmlファイルをディスクからreadして渡すのもおk。

file_path = 'htmlのファイルパス'
f = open(file_path, 'r')
data = f.read()
f.close()

soup = BeautifulSoup(data)

1つの要素にアクセス

soup.find('div')

あれ・・・? なんもとれねぇ。

ソースみたら、全部テーブルだった。。。まじ?(よくみたら推奨ブラウザみたいなのがありました。普通にブラウジングしたら問題ないはず)

soup.find('table')
# いっぱいhtmlが出力される・・・はず

複数の値を取得する

複数の値を取得したいならfindAllを使う。

# まだbeautifulsoupのオブジェクト
>>> type(soup.find('table'))
<class 'bs4.element.Tag'>

# こっちもそうだけど、こっちはループさせることができる
>>> type(soup.findAll('table'))
<class 'bs4.element.ResultSet'>

複数値がとれたらループすることもできる。そうして子要素にアクセスすることができる。pythonlistとほとんど同じ使い方ができる(と思う)

>>> len(soup.findAll('table'))
25

for table in soup.findAll('table'):
    print table # 何かいっぱいでてくる。。。はず

classなどの属性を指定して検索する

findにはパラメータを渡すことができる。

まずはclassを指定して検索する。

soup.findAll('ul', {'class': 'emphasis'})

こんな感じでdictで渡せばそれを条件に検索してくれる。便利。

もちろんidも使えるし、属性値もいける。

soup.findAll('td', {'align': 'center'})

テキストを取得

BeautifulSoupのオブジェクトで、タグの中にテキストが存在するなら、textで取得することができる。

soup.find('td', {'align': 'center'}).text

# メソッドもある。こっちのほうがいいのかな?
soup.find('td', {'align': 'center'}).getText()

属性値を取得

data-*みたいな属性値にもアクセスできるし、imgタグやaタグのsrcまたはhrefにもアクセスできる。

BeautifulSoupのオブジェクトにdictの要素にアクセスするように指定すればおk.

soup.find('td', {'align': 'center'})['align']
'center'

soup.find('a')['href']
'http://help.yahoo.co.jp/'

soup.find('img')['src']
'http://k.yimg.jp/images/clear.gif'

こんな感じ。

雑感

何度か触る割には本日あまり覚えていなかったのがショックだったのでメモしておきます。。。

過去ログに残っているので最後に触ったのって2年前なのね。。。

www.aipacommander.com

www.aipacommander.com

2016年9月24日

うーむ困った。

自分の弱点というか、悪いことに気がついた。

どうやら、”完成させる”という気持ちが弱いらしい。。。

最近はすごく調子が良いと思っていて、本はバンバン読めるようになってきたし(訳書やちゃんと理解しているかどうかは自信無)、プログラムも公開まではしていないけど、一応毎日書くようにはしている。習慣化しはじめている。

しかし、、、インプットの割にはいつまでたっても作品が完成しない。

企画時はウキウキになってモチベーションも高く、2日ぐらいで形はできるんだけど。。。

どうしても最後の頑張りが足りなかったり、途中でハマると飽きっぽくなる。いやまぁ飽きっぽい性格ではあるんだけど。

プログラムを触るのが好きなだけで、作品が完成させることができない。これはまずい。すごくまずい。

だって、内容のレベルは色々あると思うが、アウトプットができていないことになる。趣味であれば、100歩譲って「まぁいいか」ってなるかも知れないが、仕事ではふぁいあーだぞふぁいあー(要するにクビ、リストラ)

1ヶ月前ぐらいそんなことで怒られたような気がする。。。(仕事でね)

さすがに仕事では不思議なモチベーションが支えてくれるので、ちゃんと最後まで提出しているが、このまま続くとまずいと思う。根拠ないけど、まずい気がする!

どうすればぁああああああああ!!!??

とりあえず今やっていることをなんとか完成させましょ。。。