J'aimerais vraiment pouvoir permettre à Beautiful Soup de correspondre à n'importe quelle liste de balises, comme ça. Je sais que attr accepte les regex, mais y a-t-il quelque chose dans une belle soupe qui vous permet de le faire?
soup.findAll("(a|div)")
Production:
<a> ASDFS
<div> asdfasdf
<a> asdfsdf
Mon objectif est de créer un grattoir capable de saisir des tableaux à partir de sites. Parfois, les balises sont nommées de manière incohérente, et j'aimerais pouvoir entrer une liste de balises pour nommer la partie "données" d'une table.
find_all()
est la méthode la plus privilégiée dans l'API de recherche Beautiful Soup.
Vous pouvez passer une variation de filtres. Passez également une liste pour trouver plusieurs balises:
>>> soup.find_all(['a', 'div'])
Exemple :
>>> 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>]
Ou vous pouvez utiliser un expression régulière pour rechercher des balises contenant a
ou div
:
>>> import re
>>> soup.find_all(re.compile("(a|div)"))
Notez que vous pouvez également utiliser des expressions régulières pour rechercher dans les attributs des balises. Par exemple:
import re
from bs4 import BeautifulSoup
soup.find_all('a', {'href': re.compile(r'crummy\.com/')})
Cet exemple trouve tous les <a>
tags qui pointent vers un site Web contenant la sous-chaîne 'crummy.com'
.
(Je sais que c'est un très ancien article, mais j'espère que quelqu'un trouvera ces informations supplémentaires utiles.)
oui voir les documents ...
http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html
import re
soup.findAll(re.compile("^a$|(div)"))