2013-03-27 8 views
7

Robię analizę układu strony w pythonie. Zasadniczym zadaniem jest programowe mierzenie wielkości elementów z podanymi kodami źródłowymi HTML, abyśmy mogli uzyskać dane statystyczne dotyczące stosunku treści do reklamy, pozycji bloku reklamowego, rozmiaru bloku reklamowego dla korpusu strony internetowej.Jak programowo zmierzyć rozmiary elementów w kodzie źródłowym HTML przy użyciu Pythona?

Oczywistym podejściem jest użycie atrybutów szerokość/wysokość, ale nie zawsze są one dostępne. Poza tym rzeczy takie jak width: 50% muszą zostać obliczone po załadowaniu do DOM. Więc domyślam się, że ładowanie kodu źródłowego HTML do przeglądarki predefiniowanej pod kątem rozmiaru okna (jak na przykład mechanize, chociaż nie jestem pewien, czy można ustawić rozmiar okna) jest dobrym sposobem na wypróbowanie, ale zmechanizowanie nie wspiera powrotu rozmiar elementu mimo to.

Czy istnieje jakiś uniwersalny sposób (bez atrybutów szerokości/wysokości), aby zrobić to w pythonie, najlepiej z pewną biblioteką?

Dzięki!

+0

Człowieku, nie mogę nawet dostać moje elementy czynią do tej samej wielkości w IE i Firefox. Jeśli istnieje "oficjalny" sposób obliczania wymiarów, można założyć, że połowa rynku ignoruje to i robi to na swój własny sposób. – Kevin

+1

Wystarczy, aby skierować cię w stronę - może chcesz sprawdzić, co WebKit i inne renderery oferują jako dane wyjściowe. Oczywiście nie dostaniemy Tridenta, ale WK/Gecko może być wystarczająco dobry ... – TC1

+0

@Kevin Twoja troska jest z pewnością ważna. Ale dla (empirycznego) celu badawczego pozostanę przy każdej przeglądarce, która może to zrobić. Rozumiem, że w IE i Firefox niektóre elementy nie są renderowane w tej samej wielkości i ja też cierpiałem. Ale czy to naprawdę ogromna różnica? Nie martwię się o dryfowanie tutaj kilku pikseli :) – ShuaiYuan

Odpowiedz

1

Proponuję spojrzeć na Ghost - WebKit klient sieciowy napisany w pythonie. Posiada obsługę JavaScript, dzięki czemu można łatwo wywoływać funkcje JavaScript i uzyskać jego wartość zwracaną. Przykład pokazuje, w jaki sposób dowiedzieć się, google szerokość pola tekstowego:

>>> 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

Jest to bardzo pomocne. Jednak chciałbym, aby Ghost miał dokument API. – ShuaiYuan

0

Aby poprawnie uzyskać wszystkie ostateczne rozmiary, należy wyrenderować zawartość, uwzględniając wszystkie arkusze stylów CSS i ewentualnie cały javascript. Dlatego jedynym sposobem na uzyskanie rozmiarów z programu w języku Python jest implementacja pełnej przeglądarki internetowej w Pythonie, użycie biblioteki, która może to zrobić, lub zdalne sterowanie przeglądaniem przeglądarki.

Późniejsza podejście może być wykonane przy użyciu narzędzia Selenium - sprawdź, jak można uzyskać wynik wyrażenia JavaScript z wewnątrz programu Python tutaj: Can Selenium web driver have access to javascript global variables?

Powiązane problemy