web-dev-qa-db-ja.com

正規表現を使用してタグを見つける美しいスープ?

私は、Beautiful Soupがあらゆるタグのリストと一致できるようにしたいのです。私はattrが正規表現を受け入れることを知っていますが、それを可能にする美しいスープには何かありますか?

soup.findAll("(a|div)")

出力:

<a> ASDFS
<div> asdfasdf
<a> asdfsdf

私の目標は、サイトからテーブルを取得できるスクレーパーを作成することです。タグの名前に一貫性がない場合があります。タグのリストを入力して、テーブルの「データ」部分に名前を付けたいと思います。

15
user3314418

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)"))
34
hwnd

また、正規表現を使用してタグの属性内を検索することもできます。例えば:

import re
from bs4 import BeautifulSoup

soup.find_all('a', {'href': re.compile(r'crummy\.com/')})

この例では、サブストリング<a>を含むWebサイトにリンクするすべての'crummy.com'タグを検索します。

(これは非常に古い投稿であることは知っていますが、誰かがこの追加情報が役立つことを願っています。)

34
Manu CJ

はい、ドキュメントを参照してください...

http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html

import re

soup.findAll(re.compile("^a$|(div)"))
3
ZJS