Użytkownicy dodać więcej treści do strony (z wcześniejszych terminach), klikając element <div onclick="control.moreData()" id="moreLink">More...</div>
w dolnej części strony.
Aby uzyskać pożądaną zawartość, można użyć Selenium, aby kliknąć element id="moreLink"
lub wykonać trochę kodu JavaScript, aby wywołać control.moreData();
w pętli.
Na przykład, jeśli chcesz, aby cała zawartość była już w piątek, 15 lutego 2013 r. (Wygląda na to, że istnieje ciąg tego formatu dla każdej daty, dla załadowanej zawartości), twój python może wyglądać mniej więcej tak:
content = browser.page_source
desired_content_is_loaded = false;
while (desired_content_is_loaded == false):
if not "Friday, February 15, 2013" in content:
sel.run_script("control.moreData();")
content = browser.page_source
else:
desired_content_is_loaded = true;
EDIT:
Jeśli wyłączysz obsługę JavaScript w przeglądarce i odświeżyć stronę, widać, że nie ma „trendy” zawartość w ogóle. To, co mi mówi, to fakt, że te elementy są ładowane dynamicznie. Oznacza to, że nie są częścią dokumentu HTML, który jest pobierany po otwarciu strony. Selenium .get() czeka na załadowanie dokumentu HTML, ale nie dla wszystkich JS. Nie wiadomo, czy JS asynchronizacji zakończy się przed lub po jakimkolwiek innym zdarzeniu. Kończy się, gdy jest gotowy i za każdym razem może być inny. To by wyjaśniało, dlaczego czasami możesz uzyskać wszystkie, niektóre lub żadne z tych treści, gdy zadzwonisz pod numer browser.page_source
, ponieważ zależy to od tego, jak szybko działa asynchroniczny JS w tym momencie.
Po otwarciu strony możesz spróbować poczekać kilka sekund przed uzyskaniem źródła - dając JS, który ładuje czas zawartości do ukończenia.
browser.get(googleURL)
time.sleep(3)
content = browser.page_source
Jakieś konkretne powody, dla których warto używać webloverów przez selen? – Torxed
@ Torxed - podejrzewam, że jest to spowodowane dynamiczną obsługą treści/javascript ... – root
Tak, próbowałem urllib2, ale nie działało ze względu na zawartość dynamiczną/javascript – user2392965