はじめに
先日(よくみたら去年でした)の続き兼小ネタです。
さすがに前回書いた記事だけでは、実践したときに困ったことがあったので。
実例: tableタグのデータを拾ってみよう
例として、下記のtableのtrタグの内容を取得します。
<table> <thead>...</thead> <tbody> <tr><th>aaa</th><td class="name">bbb</td><td class="image"><img src="..." alt="ccc"></td></tr> <tr><th>ddd</th><td class="name">eee</td><td class="image"></td></tr> ... </tbody> </table>
# coding: UTF-8 # Webサイトへのアクセスに使うライブラリをimport import urllib.request from bs4 import BeautifulSoup url = "対象のURL" try: # URLにアクセス html = urllib.request.urlopen(url) except: print('Cannot open the url.') try: # HTMLのパース soup = BeautifulSoup(html, "html.parser") except: print('Cannnot read the html data.') # HTMLを解析、欲しいデータを持ってくる targets = soup.select('#target table tbody tr')
ここまではいいと思いますが、ここから先です。
# タグの中の文字列を取得する for target in targets: header= target.select_one('th').get_text() name = target.select_one('td.name').get_text() image = target.select_one('td.image img') if image is None: image = '' else: image = image['alt'] print(header + ',' + name + ',' + image)
ポイントは3つでしょうか。
select
はlistオブジェクトで取得ができるので、select_one
で一つに絞りました。- また、タグがない場合には
None
が返るので、if
文でチェックを入れました。 - 属性値の取得は、
image['alt']
でできました。
(厳密にはalt
属性の有無も見るべきなんでしょうが…)
さいごに
普段Pythonを使わないので、拙いながらも動かすことを優先しました。
わからなくなったら、やはりマニュアルを見るに限ります。
www.crummy.com
以上でした。