私は、Beautiful Soupがあらゆるタグのリストと一致できるようにしたいのです。私はattrが正規表現を受け入れることを知っていますが、それを可能にする美しいスープには何かありますか?
soup.findAll("(a|div)")
出力:
<a> ASDFS
<div> asdfasdf
<a> asdfsdf
私の目標は、サイトからテーブルを取得できるスクレーパーを作成することです。タグの名前に一貫性がない場合があります。タグのリストを入力して、テーブルの「データ」部分に名前を付けたいと思います。
find_all()
は、Beautiful Soup検索APIで最も好まれているメソッドです。
さまざまなフィルターを渡すことができます。また、複数のタグを見つけるために list を渡します。
>>> soup.find_all(['a', 'div'])
例:
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<html><body><div>asdfasdf</div><p><a>foo</a></p></body></html>')
>>> soup.find_all(['a', 'div'])
[<div>asdfasdf</div>, <a>foo</a>]
または、 正規表現 を使用して、a
またはdiv
を含むタグを検索できます。
>>> import re
>>> soup.find_all(re.compile("(a|div)"))
また、正規表現を使用してタグの属性内を検索することもできます。例えば:
import re
from bs4 import BeautifulSoup
soup.find_all('a', {'href': re.compile(r'crummy\.com/')})
この例では、サブストリング<a>
を含むWebサイトにリンクするすべての'crummy.com'
タグを検索します。
(これは非常に古い投稿であることは知っていますが、誰かがこの追加情報が役立つことを願っています。)
はい、ドキュメントを参照してください...
http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
import re
soup.findAll(re.compile("^a$|(div)"))