python español - ¿Cómo usar lxml para encontrar un elemento por texto?





beautifulsoup web (3)


Otra forma que me parece más directa:

results = []
root = lxml.hmtl.fromstring(the_html_above)
for tag in root.iter():
    if "TEXT A" in tag.text
        results.append(tag)

Supongamos que tenemos el siguiente html:

<html>
    <body>
        <a href="/1234.html">TEXT A</a>
        <a href="/3243.html">TEXT B</a>
        <a href="/7445.html">TEXT C</a>
    <body>
</html>

¿Cómo hago para que encuentre el elemento "a", que contiene "TEXTO A"?

Hasta ahora tengo:

root = lxml.hmtl.document_fromstring(the_html_above)
e = root.find('.//a')

He intentado:

e = root.find('.//a[@text="TEXT A"]')

pero eso no funcionó, ya que las etiquetas "a" no tienen ningún atributo "texto".

¿Hay alguna manera en que pueda resolver esto de manera similar a lo que he probado?




Estás muy cerca. Use text()= lugar de @text (que indica un atributo).

e = root.xpath('.//a[text()="TEXT A"]')

O, si solo sabe que el texto contiene "TEXTO A",

e = root.xpath('.//a[contains(text(),"TEXT A")]')

O, si solo sabe que el texto comienza con "TEXTO A",

e = root.xpath('.//a[starts-with(text(),"TEXT A")]')

Consulte la documentación para obtener más información sobre las funciones de cadena disponibles.

Por ejemplo,

import lxml.html as LH

text = '''\
<html>
    <body>
        <a href="/1234.html">TEXT A</a>
        <a href="/3243.html">TEXT B</a>
        <a href="/7445.html">TEXT C</a>
    <body>
</html>'''

root = LH.fromstring(text)
e = root.xpath('.//a[text()="TEXT A"]')
print(e)

rendimientos

[<Element a at 0xb746d2cc>]



Incluso mejor idea para esto. Tú también puedes hacer esto.

body,
html {
  height: 100%;
}

.parent {
  white-space: nowrap;
  height: 100%;
  text-align: center;
}

.parent:after {
  display: inline-block;
  vertical-align: middle;
  height: 100%;
  content: '';
}

.centered {
  display: inline-block;
  vertical-align: middle;
  white-space: normal;
}
<div class="parent">
  <div class="centered">
    <p>Lorem ipsum dolor sit amet.</p>
  </div>
</div>





python html lxml