Python BeautifulSoup da múltiples etiquetas para encontrarTodos

1 minuto de lectura

Estoy buscando una manera de usar findAll para obtener dos etiquetas, en el orden en que aparecen en la página.

Actualmente tengo:

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 lo uso en una página con solo ’em’ o ‘strong’, obtendrá todas esas etiquetas, si lo uso en una con ambas, obtendrá etiquetas ‘strong’.

¿Hay alguna forma de hacer esto? Mi principal preocupación es preservar el orden en que se encuentran las etiquetas.

avatar de usuario
jfs

Tú podrías pasar una listapara encontrar cualquiera de las etiquetas dadas:

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

  • Creo que sopa.findAll([‘hr’, ‘strong’]) podría hacer el trabajo, find_all no se ejecuta.

    – oscarmlage

    31 de octubre de 2014 a las 12:09

  • @r0sk: find_all() es el nombre correcto en beautifulsoup4. Haz clic en el enlace de la respuesta. findAll() es para BeautifulSoup 3 que se reemplaza por Beautiful Soup 4.

    – jfs

    1 de diciembre de 2014 a las 17:48

Utilice expresiones regulares:

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

La expresion r'(hr|strong)' encontrará cualquiera hr etiquetas o strong etiquetas

Encontrar múltiple etiquetas, puedes usar el , Selector de CSSdonde puede especificar varias etiquetas separadas por una coma ,.

Para usar un selector de CSS, use el .select_one() método en lugar de .find()o .select() en vez de .find_all().

Por ejemplo, para seleccionar todo <hr> y strong etiquetas, separe las etiquetas con un ,:

tags = soup.select('hr, strong')

¿Ha sido útil esta solución?