2013-03-27 13 views
7

Sto eseguendo l'analisi del layout della pagina web in python. Un compito fondamentale consiste nel misurare a livello di codice le dimensioni degli elementi in base ai codici sorgente HTML, in modo da ottenere dati statistici sul contenuto/rapporto degli annunci, sulla posizione del blocco degli annunci, sulla dimensione del blocco degli annunci per il corpus della pagina web.Come misurare a livello di codice le dimensioni degli elementi nel codice sorgente HTML usando python?

Un approccio ovvio è utilizzare gli attributi larghezza/altezza, ma non sono sempre disponibili. Inoltre, cose come width: 50% devono essere calcolate dopo il caricamento in DOM. Quindi penso che il caricamento del codice sorgente HTML in un browser predefinito di dimensioni finestra (come mechanize sebbene non sia sicuro che la dimensione della finestra possa essere impostata) è un buon modo per provare, ma la meccanizzazione non supporta il ritorno di un dimensione dell'elemento comunque.

Esiste un modo universale (senza attributi larghezza/altezza) per farlo in python, preferibilmente con qualche libreria?

Grazie!

+0

uomo, non riesco nemmeno a ottenere i miei elementi per rendere alla stessa dimensione in IE e Firefox. Se esiste un modo "ufficiale" per calcolare le dimensioni, puoi scommettere che metà del mercato lo ignora e lo fa a modo loro. – Kevin

+1

Solo per indirizzarti verso una direzione - potrebbe voler esaminare ciò che WebKit e gli altri renderer offrono come output. Ovviamente non otterrà Trident, ma WK/Gecko potrebbe essere abbastanza buono ... – TC1

+0

@Kevin La tua preoccupazione è certamente valida. Ma per uno scopo di ricerca (empirico), mi limiterò a qualsiasi browser in grado di farlo. Capisco che in IE e Firefox alcuni elementi non sono resi come le stesse dimensioni e anche io ho sofferto. Ma è davvero una grande differenza? Non sono preoccupato per la deriva di molti pixel qui :) – ShuaiYuan

risposta

1

vi consiglio di dare un'occhiata a Ghost - webkit client web scritto in python. Ha il supporto JavaScript in modo da poter chiamare facilmente le funzioni JavaScript e ottenere il suo valore di ritorno. esempio mostra come scoprire google larghezza casella di testo:

>>> from ghost import Ghost 
>>> ghost = Ghost() 
>>> ghost.open('https://google.lt') 
>>> width, resources = ghost.evaluate("document.getElementById('gbqfq').offsetWidth;") 
>>> width 
541.0 # google text box width 541px 
+0

È molto utile. Tuttavia, vorrei che Ghost abbia un documento API. – ShuaiYuan

0

Per ottenere correttamente tutte le dimensioni finali, è necessario renderizzare i contenuti, tenendo conto di tutti i fogli di stile CSS e possibilmente di tutti i javascript. Pertanto, l'unico modo per ottenere le dimensioni da un programma Python è di avere un'implementazione completa del browser Web in Python, utilizzare una libreria che può farlo o pilotare un processo remoto del browser, in remoto.

L'approccio seguito può essere fatto con l'uso degli strumenti di Selenio - verificare come è possibile ottenere il risultato di espressioni javascript all'interno di un programma Python qui: Can Selenium web driver have access to javascript global variables?

Problemi correlati