XPATH – html mit vielen Kindern

Betrachten Sie das html in der Seitenvariable.

Wie kann ich auf die td s zugreifen?

  • Unterproikation.PIPE kann nicht auf Windows verarbeitet werden
  • Python 2.7: Thread sicher drucken
  • Es kann nur eine begrenzte Anzahl von Seiten abgerufen werden
  • PySpark Bewertung
  • Debugging einer Flasche App läuft in Gunicorn
  • Function1 aus einer anderen Datei fehl, wenn diese Funktion1 eine andere Funktion2 in function1 aufruft
  • Ich möchte auf sie zugreifen wie xpath("/table/tr/td/text())"

    Ich möchte nicht auf die anderen tr s

    Leider xpath('.//table/tr/tr/tr/td/text()') dieser Ausdruck xpath('.//table/tr/tr/tr/td/text()') auch nicht.

    Python-Code:

     import __future__ from lxml import html import requests from bs4 import BeautifulSoup page = """ <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>cv</title> </head> <body> <table> <tr> <tr> <tr> <td>table1 td1</td> <td>table1 td2</td> </tr> </tr> </tr> </table> <table> <tr> <tr> <tr> <td>table2 td1</td> <td>table2 td2</td> </tr> </tr> </tr> </table> <table> <tr> <tr> <tr> <td>table3 td1</td> <td>table3 td2</td> </tr> </tr> </tr> </table> </body> </html> """ soup = str(BeautifulSoup(page, 'html.parser')) tree = html.fromstring(soup) things = tree.xpath('.//table/tr/tr/tr/td/text()') print(things) for thing in things: print(thing) print('That's all') 

    Ich will es von der Wurzel!

    3 Solutions collect form web for “XPATH – html mit vielen Kindern”

    Verwenden Sie xpath //td/text() :

     things = tree.xpath('//td/text()') 

    Die //td steht für "findet jedes td Element in jeder Tiefe.

    Funktioniert bei mir.

    Drucken td Elemente gruppiert pro table :

     doc = html.fromstring(page) for table_elm in doc.xpath("//table"): print "another table" things = table_elm.xpath('.//td/text()') print(things) 

    Beachten Sie, dass in diesem Fall die . In xpath signifikant

    Du musst dich nicht zu schneiden:

     soup = str(BeautifulSoup(page, 'html.parser')) 

    Du kannst so etwas verwenden:

     >>> soup = BeautifulSoup(page, 'html.parser') >>> for td in soup.find_all('td'): ... print(td) ... <td>table1 td1</td> <td>table1 td2</td> <td>table2 td1</td> <td>table2 td2</td> <td>table3 td1</td> <td>table3 td2</td> 

    Oder du kannst auch print(td.text) wenn du den Text innerhalb des Elements willst.

    tr innerhalb von tr ist ungültig HTML.

    Und das scheint von dem html.fromstring() Parser "fixiert" zu werden.

    Sie können dies mit diesem xpath testen:

     things = tree.xpath('//table/tr/*') 

    Und Ausgabe mit:

     for thing in things: print(thing.tag) 

    Was erzeugt:

     td td td td td 
    Python ist die beste Programmiersprache der Welt.