2013-12-18 10 views
23

Szukam sposobu użycia findAll, aby uzyskać dwa znaczniki, w kolejności, w jakiej pojawiają się na stronie.Python BeautifulSoup daje wiele tagów do znalezienia Wszystkie

Obecnie mam:

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 

Jeśli używam tego na stronie tylko „em” lub „mocny” w to wtedy będzie mi się wszystkie z tych tagów, jeśli mogę użyć na jednej z obu otrzyma "silne" tagi.

Czy istnieje sposób, aby to zrobić? Moją główną troską jest zachowanie kolejności, w jakiej znajdują się znaczniki.

Odpowiedz

50

mógł pass a list, można znaleźć zarówno hr lub strong tags:

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

myślę soup.findAll ([ 'h', 'mocny']) mógł wykonać zadanie, find_all nie działa. – r0sk

+5

@ r0sk: 'find_all()' jest poprawną nazwą na beautifulsoup4. Kliknij link w odpowiedzi. 'findAll()' jest dla BeautifulSoup 3, który jest zastąpiony przez Beautiful Soup 4. – jfs

2

używać wyrażeń regularnych:

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

Wyrażenie r'(hr|strong)' znajdzie albo hr tagów lub strong tagi.

Powiązane problemy