2014-07-15 17 views
9

Mi piacerebbe davvero essere in grado di consentire a Beautiful Soup di abbinare qualsiasi elenco di tag, in questo modo. So che attr accetta regex, ma c'è qualcosa nella bella zuppa che ti permette di farlo?Beautiful Soup Usando Regex per trovare i tag?

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

uscita:

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

Il mio obiettivo è quello di creare un raschietto che può afferrare tabelle da siti. Talvolta i tag vengono denominati in modo incoerente e mi piacerebbe poter inserire un elenco di tag per denominare la parte "dati" di una tabella.

+3

è possibile utilizzare un elenco di tag: 'soup.find_all ([ 'a', 'div']) ' –

+0

@ behzad.nouri dovresti assolutamente metterlo come risposta. – alecxe

risposta

25

find_all() è il metodo più favorita in Bella di ricerca zuppa API.

È possibile passare una variazione di filtri. Inoltre, passare un list per trovare più tag:

>>> soup.find_all(['a', 'div']) 

Esempio:

>>> 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>] 

Oppure si può utilizzare un regular expression per trovare i tag che contengono a o div:

>>> import re 
>>> soup.find_all(re.compile("(a|div)")) 
+0

+1 per entrambe le opzioni regex e non regex. :) – zx81

+0

un'opzione regex è esattamente quello che stavo cercando - grazie! – MaxU

6

Nota che puoi anche usare le espressioni regolari per cercare negli attributi dei tag. Per esempio:

import re 
from bs4 import BeautifulSoup 

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

Questo esempio trova tutti <a> tag che puntano a un sito web che contiene la stringa 'crummy.com'.

(So che questo è un post molto vecchio, ma si spera che qualcuno troverò queste ulteriori informazioni utili.)

Problemi correlati