2017-01-11 6 views
-1

Я использую urlfetch.fetch в движке приложения с использованием Python 2.7.Использование URLFetch в Python GAE для получения полного документа

Я пробовал выборки 2 URL-адресов, принадлежащих двум различным доменам. Для первого результата результат urlfetch.fetch включает результаты после разрешения запросов XHR, которые сделаны для получения рекомендованных продуктов. Однако для другой страницы, принадлежащей другому домену, запросы XHR не разрешены, и я просто получаю простой HTML по большей части. В XHR запросы на этой странице, также в целях получения рекомендуемых продуктов, чтобы показать, и т.д.

Вот как я использую UrlFetch: fetch_result = urlfetch.fetch (URL, срок = 5, validate_certificate = True)

URL 1 (тот, где разрешен XHR и реакция завершена) https://www.walmart.com/ip/HP-15-f222wm-ndash-15.6-Laptop-Touchscreen-Windows-10-Home-Intel-Pentium-Quad-Core-Processor-4GB-Memory-500GB-Hard-Drive/53853531

URL 2 (тот, где я просто получить простой HTML для большей части) https://www.flipkart.com/oricum-blue-486-loafers/p/itmezfrvwtwsug9w?pid=SHOEHZWJUMMTEYRU

Может кто-то пожалуйста, совет, что я могу потерять в отношении несогласованности.

+0

Невозможно, чтобы urlfetch выполнил скрипты javascript на странице и включил их результаты. Что заставляет вас думать, что urlfetch каким-то образом включает в себя результаты запросов xhr в его результате? – snakecharmerb

+0

Вы можете сделать urlfetch.fetch для URL1, который я указал, и сравнить его вывод с источником HTML в браузере. Вы увидите, что контент отличается. Часть разницы относится к другим продуктам, показанным на странице - это извлекается через XHR, как видно из консоли разработчика Chrome. Чтобы быть ясным, я не ожидал, что urlfetch.fetch выполнит JS и т. Д., Но в этом случае был немного удивлен, что его результат выглядел иначе, чем обычный контент источника HTML. – user6781569

ответ

0

Сервер обслуживает разные выходные данные на основе строки пользовательского агента, предоставленной в заголовках запроса.

По умолчанию urlfetch.fetch отправит запросы с заголовком пользовательского агента, установленным на AppEngine-Google; (+http://code.google.com/appengine; appid: myapp.appspot.com.

браузер отправит заголовок агента пользователя, как это: Mozilla/5.0 (X11; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0

Если переопределить заголовки по умолчанию для urlfetch.fetch

headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0'} 
urlfetch.fetch(url, headers=headers) 

вы увидите, что HTML, который вы получаете практически идентичен тому, что служил в браузер.

Смежные вопросы