2013-12-18 11 views
23

Ich bin auf der Suche nach einer Möglichkeit, findAll zu verwenden, um zwei Tags zu erhalten, in der Reihenfolge, die sie auf der Seite erscheinen.Python BeautifulSoup geben mehrere Tags zu findAll

Zur Zeit habe ich:

import requests 
import BeautifulSoup 

def get_soup(url): 
    request = requests.get(url) 
    page = request.text 
    soup = BeautifulSoup(page) 
    get_tags = soup.findAll('hr' and 'strong') 
    for each in get_tags: 
     print each 

Wenn ich das mit auf einer Seite verwenden nur ‚em‘ oder ‚stark‘ in ihm, dann wird es mir all diese Tags bekommen, wenn ich auf einem mit beiden verwenden es wird "starke" Tags erhalten.

Gibt es eine Möglichkeit, dies zu tun? Mein Hauptanliegen ist es, die Reihenfolge zu erhalten, in der die Tags gefunden werden.

Antwort

50

Sie könnten pass a list zu finden, entweder hr oder strong tags:

tags = soup.find_all(['hr', 'strong']) 
+1

Ich denke soup.findAll ([ 'hr', 'starke']) könnte die Arbeit erledigen, find_all nicht ausgeführt. – r0sk

+5

@ r0sk: 'find_all()' ist der korrekte Name auf beautifulsoup4. Klicken Sie auf den Link in der Antwort. 'findAll()' ist für BeautifulSoup 3, das durch Beautiful Soup 4 ersetzt wird. – jfs

2

Verwenden von regulären Ausdrücken:

import re 
get_tags = soup.findAll(re.compile(r'(hr|strong)')) 

Der Ausdruck r'(hr|strong)' wird entweder hr Tags oder strong Tags finden.

Verwandte Themen