python urllib2-дождитесь завершения загрузки/перенаправления страницы перед очисткой?
Я учусь делать веб-скребки и хочу очистить TripAdvisor для личного проекта, захватив html с помощью urllib2. Тем не менее, я сталкиваюсь с проблемой, когда, используя приведенный ниже код, html, который я получаю, не корректен, поскольку страница, похоже, занимает секунду для перенаправления (вы можете проверить это, посетив url - адрес) - вместо этого я получаю код со страницы, которая изначально кратко появляется.
есть ли какое-то поведение или параметр, чтобы убедиться, что страница полностью закончена загрузка / перенаправление перед получением содержимого веб-сайта?
import urllib2
from bs4 import BeautifulSoup
bostonPage = urllib2.urlopen("http://www.tripadvisor.com/HACSearch?geo=34438#02,1342106684473,rad:S0,sponsors:ABEST_WESTERN,style:Szff_6")
soup = BeautifulSoup(bostonPage)
print soup.prettify()
Edit: ответ тщательный, однако, в конце концов, что решило мою проблему было это: https://stackoverflow.com/a/3210737/1157283
1 ответов
Inreresting проблема не в перенаправлении, что страница изменяет содержимое с помощью javascript, но urllib2
нет JS
двигатель это просто GETS
data, если вы отключили javascript в своем браузере, вы заметите, что он загружает в основном тот же контент, что и what urllib2
возвращает
import urllib2
from BeautifulSoup import BeautifulSoup
bostonPage = urllib2.urlopen("http://www.tripadvisor.com/HACSearch?geo=34438#02,1342106684473,rad:S0,sponsors:ABEST_WESTERN,style:Szff_6")
soup = BeautifulSoup(bostonPage)
open('test.html', 'w').write(soup.read())
test.html
и отключение JS в вашем браузере, проще всего в содержимом firefox - > снимите флажок Включить javascript, генерирует идентичные результирующие наборы.
Итак, что мы можем сделать хорошо, сначала мы следует проверить, предлагает ли сайт API, слом имеет тенденцию хмуриться http://www.tripadvisor.com/help/what_type_of_tripadvisor_content_is_available
путешествия / отель API? похоже, что могут, хотя и с некоторыми ограничениями.
но если нам все еще нужно выскоблить его, с JS, то мы можем использовать selenium
http://seleniumhq.org/ его в основном используется для тестирования, но его легко и имеет довольно хорошие документы.
я тоже нашел это очистка веб-сайтов с включенным Javascript? и это http://grep.codeconsult.ch/2007/02/24/crowbar-scrape-javascript-generated-pages-via-gecko-and-rest/
надеюсь, что это поможет.
в качестве примечания:
>>> import urllib2
>>> from bs4 import BeautifulSoup
>>>
>>> bostonPage = urllib2.urlopen("http://www.tripadvisor.com/HACSearch?geo=34438#02,1342106684473,rad:S0,sponsors:ABEST_WESTERN,style:Szff_6")
>>> value = bostonPage.read()
>>> soup = BeautifulSoup(value)
>>> open('test.html', 'w').write(value)