¿Es posible que lxml funcione de una manera que no distinga mayúsculas y minúsculas?

Estoy tratando de raspar las palabras clave META y las tags de descripción de sitios web arbitrarios. Obviamente no tengo control sobre dicho sitio web, así que tengo que tomar lo que me dan. Tienen una variedad de carcasas para la etiqueta y los atributos, lo que significa que necesito trabajar sin tener en cuenta las mayúsculas. No puedo creer que los autores de lxml sean tan tercos como para insistir en el cumplimiento de los estándares forzados cuando excluye gran parte del uso de su biblioteca.

Me gustaría poder decir doc.cssselect('meta[name=description]') (o algún equivalente de XPath) pero esto no detectará las tags debidas othe cautial D.

Actualmente estoy usando esto como solución alternativa, ¡pero es horrible!

 for meta in doc.cssselect('meta'): name = meta.get('name') content = meta.get('content') if name and content: if name.lower() == 'keywords': keywords = content if name.lower() == 'description': description = content 

Parece que el meta nombre de etiqueta se trata de forma insensible a mayúsculas y minúsculas, pero los atributos no. Sería aún más molesto. ¡El meta -mayúsculo también!

Los valores de los atributos deben distinguirse entre mayúsculas y minúsculas.

Puedes usar expresiones regulares arbitrarias para seleccionar un elemento:

 #!/usr/bin/env python from lxml import html doc = html.fromstring('''     ''') for meta in doc.xpath('//meta[re:test(@name, "^description$", "i")]', namespaces={"re": "http://exslt.org/regular-expressions"}): print html.tostring(meta, pretty_print=True), 

Salida:

     

lxml es un analizador XML. XML distingue entre mayúsculas y minúsculas. Está analizando HTML, por lo que debe usar un analizador de HTML. BeautifulSoup es muy popular. Su único inconveniente es que puede ser lento.

Puedes usar

 doc.cssselect.xpath("//meta[translate(@name, 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz')='description']") 

Traduce el valor de “nombre” a minúsculas y luego coincide.

Ver también:

  • XPath: ¿Cómo se hace una llamada en minúscula en xpath
  • ¿La función de traducción Xpath convierte las cosas en minúsculas?