2016-07-27 21 views
-1

Ich möchte eine Webseite analysieren, um einige Informationen darüber zu erhalten (mein genaues Problem besteht darin, alle Elemente in dieser Liste abzurufen: http://www.computerhope.com/vdef.htm).Probleme beim Parsen einer Webseite in Python

Allerdings kann ich nicht herausfinden, wie es geht.

Viele Tutorials im Internet Start mit diesem (vereinfacht): html5lib.parse(urlopen("http://www.computerhope.com/vdef.htm"))

Aber danach keiner der Tutorials erklären, wie ich das Dokument blättern und gehen den HTML-Teil ich suche.

Einige andere Tutorials erklären, wie man es mit CSSSelector macht, aber wieder beginnen alle Tutorials nicht mit einer Webseite sondern mit einer Zeichenfolge (z. B. hier: http://lxml.de/cssselect.html). So

Ich habe versucht, einen Baum mit der Web-Seite zu erstellen dies mit: fromstring(urlopen("http://www.computerhope.com/vdef.htm").read()) aber ich habe diesen Fehler: lxml.etree.XMLSyntaxError: Specification mandate value for attribute itemscope, line 3, column 28. Dieser Fehler ist aufgrund der Tatsache, dass es ein Attribut gibt, das nicht angegeben ist (z. B. <input attribute></input>), aber da ich die Webseite nicht kontrolliere, kann ich es nicht umgehen.

sind also hier ein paar Fragen, die meine Probleme lösen könnte:

  • Wie kann ich auf einen Baum zu sehen?
  • Gibt es eine Möglichkeit, den Parser weniger streng zu machen?

Vielen Dank!

+0

Suchen Sie nach XPath. Es ist ein sehr leistungsfähiges Werkzeug, um jede XML-ähnliche Struktur zu parsen. –

+0

Warum verwenden Sie etree, um HTML zu analysieren? –

Antwort

1

Probieren Sie schöne Suppe, es hat einige ausgezeichnete Eigenschaften und macht das Parsen in Python extrem einfach.

Überprüfen ihrer Dokumentation auf https://www.crummy.com/software/BeautifulSoup/bs4/doc/

EDIT:

Wie @mzjn wies darauf hin, ich habe nicht das Codebeispiel in der Antwort Include (Das ist der Grund für die Abwärts Stimme), weil ich dachte, Das OP muss es selbst herausfinden. Ich glaube, ich helfen kann, ihn aus, also hier ist der Code

from bs4 import BeautifulSoup 
import requests 

page = requests.get('http://www.computerhope.com/vdef.htm') 
soup = BeautifulSoup(page.text) 
tables = soup.findChildren('table') 
for i in (tables[0].findAll('a')): 
    print(i.text) 

Alles in der Liste der Artikel ausdruckt, ich hoffe, die OP entsprechende Anpassungen machen.

Zumindest jetzt hoffe ich, dass meine Antwort aufgewertet wird.

+0

Kann ich wissen, warum die Down-Abstimmung? Wenn Sie die Bibliothek nicht mögen, bedeutet das nicht, dass meine Antwort falsch ist, das bedeutet nur, dass unsere Meinungen sich unterscheiden. – Bharat

+2

Ich habe nicht downvote, aber ich denke, dass Sie den Downvote haben, weil dies eine Link-Only-Antwort ohne Details ist, die tatsächlich die Frage beantworten .. – mzjn

Verwandte Themen