Domanda

Attualmente sto cercando di creare un sito Web con un HTML piuttosto mal formattato (spesso mancano tag di chiusura, nessun uso di classi o ID, quindi è incredibilmente difficile andare direttamente all'elemento desiderato, ecc.).Finora ho utilizzato BeautifulSoup con un certo successo, ma ogni tanto (anche se abbastanza raramente), mi imbatto in una pagina in cui BeautifulSoup crea l'albero HTML in modo leggermente diverso da (ad esempio) Firefox o Webkit.Anche se questo è comprensibile in quanto la formattazione dell'HTML lo lascia ambiguo, se fossi in grado di ottenere lo stesso albero di analisi prodotto da Firefox o Webkit, sarei in grado di analizzare le cose molto più facilmente.I problemi sono solitamente qualcosa come il sito si apre a <b> tagga due volte e quando BeautifulSoup vede il secondo <b> tag, si chiude immediatamente il primo mentre Firefox e Webkit annidano il <b> tag.

Esiste una libreria di web scraping per Python (o anche qualsiasi altro linguaggio (sto diventando disperato)) in grado di riprodurre l'albero di analisi generato da Firefox o WebKit (o almeno avvicinarsi di BeautifulSoup in caso di ambiguità).

È stato utile?

Soluzione

BeautifulSoup come un costruttore di albero per html5lib :

from html5lib import HTMLParser, treebuilders

parser = HTMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))

text = "a<b>b<b>c"
soup = parser.parse(text)
print soup.prettify()

Output:

<html>
 <head>
 </head>
 <body>
  a
  <b>
   b
   <b>
    c
   </b>
  </b>
 </body>
</html>

Altri suggerimenti

pyWebKitGTK sembra che potrebbe essere di qualche aiuto.

Anche qui è un tizio che aveva a che fare la stessa cosa, ma ottenere l'esportazione del contenuto dopo Ran javascript, eseguire javascript in pitone con pyWebKitGTK .

cheeseshop .

Puoi anche fare questo con PyQt .

Scrapy ?

  

Scrapy è uno schermo veloce di alto livello   raschiatura e web crawling quadro,   utilizzato per i siti web di ricerca per indicizzazione e l'estratto   dati strutturati da loro pagine. esso   può essere utilizzato per una vasta gamma di   scopi, dalla data mining per   monitoraggio e test automatici.

Si può guidare un browser a scelta con SeleniumRC .

Si consiglia di dare un'occhiata al modulo di Mechanize:

http://wwwsearch.sourceforge.net/mechanize/

Bene, WebKit è open source quindi è possibile utilizzare il proprio parser (nella componente WebCore), se qualsiasi lingua è accettabile

Ian Bicking una volta ha scritto che sorprendentemente lxml potrebbe essere meglio a parsing zuppe di BeautifulSoup: http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/ (Basta ricordare per riferimento, rifugio' t ha provato che personalmente)

è possibile utilizzare parser lxml, nel BeautifulSoup, e si utilizza XPath per trovare i dati nella pagina html non formattato, è possibile copiare il XPath quando si ispezionare elemento con Firebug.

È possibile controllare questo tutorial: http://www.youtube.com/watch?v=PgWfF-Ut0zM

Dalla documentazione sembra di sì ICantBelieveItsBeautifulSoup parser è quello che vuoi:

IcantbeliveitsBeautifulSoup è anche una sottoclasse di Beautifulsoup.Ha l'euristica HTML che si conformano più da vicino allo standard HTML, ma ignora il modo in cui l'HTML viene utilizzato nel mondo reale.Ad esempio, è valido HTML per nidificare u003CB>i tag, ma nel mondo reale un u003CB>tag nidificato significa quasi sempre che l'autore ha dimenticato di chiudere il primo u003CB>tag.u003C/b>u003C/b>u003C/b>Se ti imbatti in qualcuno che nidifica effettivamente u003CB>i tag, puoi usare iCantBelievetsBeautifulSoup.u003C/b>

questo si guarda bene a me io sto usando io stesso: link

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top