web-dev-qa-db-ja.com

BS4:タグ内のテキストを取得する

綺麗なスープを使っています。このようなタグがあります:

_<li><a href="example"> s.r.o., <small>small</small></a></li>_

アンカー_<a>_タグ内のテキストのみを取得し、出力の_<small>_タグからは取得しないようにします。つまり、「_s.r.o.,_

find('li').text[0]を試しましたが、うまくいきません。

それを行うことができるコマンドがBS4にありますか?

13
Milano

1つのオプションは、contents要素の a から最初の要素を取得することです。

>>> from bs4 import BeautifulSoup
>>> data = '<li><a href="example"> s.r.o., <small>small</small></a></li>'
>>> soup = BeautifulSoup(data)
>>> print soup.find('a').contents[0]
 s.r.o., 

もう1つは、smallタグを見つけて 前の兄弟 を取得することです。

>>> print soup.find('small').previous_sibling
 s.r.o., 

まあ、あらゆる種類の代替/クレイジーなオプションもあります:

>>> print next(soup.find('a').descendants)
 s.r.o., 
>>> print next(iter(soup.find('a')))
 s.r.o., 
19
alecxe

。children を使用します

soup.find('a').children.next()
s.r.o.,
3

ループしてHTML文字列/ Webページにあるアンカータグのすべてのコンテンツを印刷する場合(urllibのurlopenを使用する必要があります)、これは機能します。

from bs4 import BeautifulSoup
data = '<li><a href="example">s.r.o., <small>small</small</a></li> <li><a href="example">2nd</a></li> <li><a href="example">3rd</a></li>'
soup = BeautifulSoup(data,'html.parser')
a_tag=soup('a')
for tag in a_tag:
    print(tag.contents[0])     #.contents method to locate text within <a> tags

出力:

s.r.o.,  
2nd
3rd

a_tagは、すべてのアンカータグを含むリストです。リスト内のすべてのアンカータグを収集し、グループ編集を有効にします(複数の場合は<a>タグがあります。

>>>print(a_tag)
[<a href="example">s.r.o.,  <small>small</small></a>, <a href="example">2nd</a>, <a href="example">3rd</a>]
0
Sumanth Lazarus