Yaleで、遊んで学ぶ日々。
Yaleで、遊んで学ぶ日々。
囲碁、ときどきプログラミング、ところにより経済。
×
[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
Calender
10 | 2024/11 | 12 |
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]
Latest Posts
(11/16)
(04/28)
(04/16)
(04/11)
(04/05)
Latest Trackbacks
Category
Access Analysis