2010-04-08 11 views
18

Estoy intentando extraer Meta Description para las páginas web recuperadas. Pero aquí estoy enfrentando el problema de la sensibilidad de mayúsculas y minúsculas de BeautifulSoup.¿Es posible que BeautifulSoup funcione de manera que no distinga entre mayúsculas y minúsculas?

Como algunas de las páginas tienen <meta name="Description y algunas tienen <meta name="description.

Mi problema es muy similar a la de Question on Stackoverflow

La única diferencia es que no puedo usar lxml .. tengo que seguir con BeautifulSoup.

Respuesta

8

Con pequeños cambios, funciona.

soup.findAll('meta', attrs={'name':re.compile("^description$", re.I)}) 
15

Puede asignar a BeautifulSoup una expresión regular para que coincida con los atributos. Algo como

soup.findAll('meta', name=re.compile("^description$", re.I)) 

podría hacer el truco. Cribbed desde the BeautifulSoup docs.

9

¿Expresión regular? Ahora tenemos another problem.

En cambio, puede pasar en una lambda:

soup.findAll(lambda tag: tag.name.lower()=='meta', 
    name=lambda x: x and x.lower()=='description') 

(x and evita una excepción cuando el atributo name no está definido para la etiqueta)

+2

+1 para evitar expresiones regex. +1 más para el enlace xkcd. – FlipMcF

+0

Usando bs4 obtengo "find_all() obtuvo varios valores para el argumento de palabra clave 'nombre'" con eso: / – Joaolvcm

3

Con bs4 utilizar lo siguiente:

soup.find('meta', attrs={'name': lambda x: x and x.lower()=='description'}) 
Cuestiones relacionadas