忍者ブログ
Yaleで、遊んで学ぶ日々。

Yaleで、遊んで学ぶ日々。

囲碁、ときどきプログラミング、ところにより経済。
[346]  [345]  [344]  [343]  [342]  [341]  [339]  [338]  [337]  [335]  [334
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PythonにおけるHTML scrapingにはBeautifulSoupが欠かせないが、その全貌がよくわかってなかった。どうも正規表現を簡潔に記述する機能としか理解していなかったのだが、実際は、HTMLソースをツリー階層に処理して、直感的に解析するツールになっている。特定のタグを検索するくらいだと気にならないが、要素間移動を利用したところ(事実ある種の作業にはこれが不可欠になる)、その一端に触れることができた。

テストコード。まだ完全には理解できていない。


from bs4 import BeautifulSoup

html = """ 
<body>
<a>A tag</a>
whatever outside <br> <br/>
<a>iyay <i> somthing inside </i> </a> 
</body>
""" 


soup = BeautifulSoup(html)


print 'navigation by "find_next()" method'
a = soup.a
for i in range(10):
    if i == 1:
        print type(a)
    print i, ':', a
    a = a.find_next()
    if not a:
        break

print '\n'
print 'navigation by "find_next_sibling()" attribute'
a = soup.a
for i in range(10):
    if i == 1:
        print type(a)
    print i, ':', a
    a = a.find_next_sibling()
    if not a:
        break

print '\n'
print 'navigation by "next_sibling" attribute'
a = soup.a
for i in range(10):
    if i == 1:
        print type(a)
    print i, ':', a
    a = a.next_sibling
    if not a:
        break

print '\n'
print 'navigation by "next_element" attribute'
a = soup.a
for i in range(10):
    if i == 1:
        print type(a)
    print i, ':', a
    a = a.next_element
    if not a:
        break


出力結果:

navigation by "find_next()" method
0 : <a>A tag</a>
<class 'bs4.element.Tag'>
1 : <br/>
2 : <br/>
3 : <a>iyay <i> somthing inside </i> </a>
4 : <i> somthing inside </i>


navigation by "find_next_sibling()" attribute
0 : <a>A tag</a>
<class 'bs4.element.Tag'>
1 : <br/>
2 : <br/>
3 : <a>iyay <i> somthing inside </i> </a>


navigation by "next_sibling" attribute
0 : <a>A tag</a>
<class 'bs4.element.NavigableString'>
1 :
whatever outside
2 : <br/>
3 :
4 : <br/>
5 :

6 : <a>iyay <i> somthing inside </i> </a>
7 :



navigation by "next_element" attribute
0 : <a>A tag</a>
<class 'bs4.element.NavigableString'>
1 : A tag
2 :
whatever outside
3 : <br/>
4 :
5 : <br/>
6 :

7 : <a>iyay <i> somthing inside </i> </a>
8 : iyay
9 : <i> somthing inside </i>

PR
この記事にコメントする
お名前:
タイトル:
文字色:
メールアドレス:
URL:
コメント:
パスワード:   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Calender
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Search in This Blog
Latest Comments
[03/30 川内のばば山田]
[03/30 川内のばば山田]
[08/06 Aterarie]
[07/05 Agazoger]
[07/01 Thomaskina]
Oldest Posts
Latest Trackbacks
フリーエリア

Barcode
Access Analysis
Powerd by NINJAブログ / Designed by SUSH
Copyright © Yaleで、遊んで学ぶ日々。 All Rights Reserved.
忍者ブログ [PR]