web-dev-qa-db-fra.com

Python BeautifulSoup donne plusieurs balises à findAll

Je cherche un moyen d'utiliser findAll pour obtenir deux balises, dans l'ordre où elles apparaissent sur la page.

Actuellement, j'ai:

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

Si j'utilise cela sur une page avec seulement 'em' ou 'strong' dedans, cela m'obtiendra toutes ces balises, si j'utilise sur une seule avec les deux, il obtiendra des balises 'fortes'.

Y a-t-il un moyen de faire cela? Ma principale préoccupation est de préserver l'ordre dans lequel les balises sont trouvées.

35
DasSnipez

Vous pouvez passer une liste , pour trouver les balises hr ou strong:

tags = soup.find_all(['hr', 'strong'])
72
jfs

Utilisez des expressions régulières:

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

L'expression r'(hr|strong)' trouvera soit les balises hr, soit les balises strong.

8
TerryA