Python初心者なのでもしかしたらBeautiful Soup以前の問題だったら申し訳ないです。
Beautiful Soup 4のチュートリアル(http://kondou.com/BS4/)を順番にこなしていて、なぜこの記述でこのような処理になるのかが分からなくなり質問させていただきます。
該当のプログラムはこれです。
Python3
1from bs4 import NavigableString 2html_doc = """ 3<html><head><title>The Dormouse's story</title></head> 4 5<p class="title"><b>The Dormouse's story</b></p> 6 7<p class="story">Once upon a time there were three little sisters; and their names were 8<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>, 9<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and 10<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; 11and they lived at the bottom of a well.</p> 12 13<p class="story">...</p> 14""" 15 16soup = BeautifulSoup(html_doc) 17 18 19def surrounded_by_strings(tag): # 兄弟要素で、next,previous両方の隣が文字列のときTrue 20 return (isinstance(tag.next_element, NavigableString) and isinstance(tag.previous_element, NavigableString)) #isinstalceは第一引数のオブジェクトが第二引数のtypeだったらTrue返すPythonの関数 21 22for tag in soup.find_all(surrounded_by_strings): #find_allは引数に渡したタグをすべて出力 23 print(tag) 24
私の解釈だと、find_allは引数に渡されたタグをすべて返してくれるものだと考えていました。
しかし、このプログラムだと、surrounded_by_strings関数の引数になにが渡されるのかが分からないです。また、この関数で返されるのは真偽値なはずなのにfind_all関数ができようされている意味がよくわからないです。
Pythonの理解ができてない可能性がおおいになるので、タイトルにBeautifulSoupと入れたのは間違いだったかもしれません、申し訳ないです。
足りない情報があれば指摘していただけると幸いです。よろしくお願いいたします。
--追記(2020/2/13)
ありがとうございます、surrounded_by_stringsの引数にはパースされたの要素を順番に挿入していることは理解できました。
つまり、find_all関数は文字列や正規表現を引数に渡せるし、「関数をfind_all関数の引数に渡すことで、その関数の引数にはパースされた要素が入るようになり」同様にfind_all関数の引数として渡すことができるということでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。