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.
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')