2016-03-02 6 views
1

Я пытаюсь понять различные случаи использования urllib2 для чтения веб-контента, и, похоже, некоторые проверки происходят на веб-сайте gifts.com, что мешает мне читать все html.python - urllib2 запрос не возвращает все html

import urllib2 
from bs4 import BeautifulSoup 

url = 'http://www.gifts.com' 
request = urllib2.Request(url) 
request.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36') 
page = urllib2.urlopen(request) 
soup = BeautifulSoup(page,'html.parser') 
print soup 

У меня была аналогичная проблема в прошлом, но был в состоянии исправить это, добавив заголовок «User-Agent», но это, кажется, некоторые Javascript проверить, что предотвращение доступа ... результат все содержание страницы до:

>>><script>var readyStateHandlerPDP = document.onreadystatechange;var AddPDPPrefetchFiles = function (SiteVersionData) {var _siteVersionNumber = SiteVersionData.GetSiteVersionNumber();var onDeferredLoadPDP = function() {/* append prefetch files for PDP to head */var head = $('head');head.append('<link rel="prefetch" href="//static.prvd.com/client/javascript/harmony/harmonytop.min.js?v=' + _siteVersionNumber + '">');head.append('<link rel="prefetch" href="//static.prvd.com/client/javascript/pdpcommon/pdpcommon.min.js?v=' + _siteVersionNumber + '">');head.append('<link rel="prefetch" href="//static.prvd.com/client/javascript/harmony/harmony.min.js?v=' + _siteVersionNumber + '">');head.append('<link rel="prefetch" href="//www.proflowers.com/product/controls/harmonytemplates/harmonytemplates.aspx?v=' + _siteVersionNumber + '">');};if (!readyStateHandlerPDP) {document.onreadystatechange = function() {if (document.readyState === "complete")onDeferredLoadPDP();}} else {readyStateHandlerPDP();onDeferredLoadPDP();}}(window.SiteVersionData);</script 
<link href="http://static.prvd.com/client/stylesheets/widgets/pseudoproduct.css?v=2016.2.24.1" rel="stylesheet" type="text/css"/></meta></meta></meta></meta></meta></head></html> 

где страница обрывается, хотя HTML продолжается, если я иду на сайт и посмотреть исходный код страницы.

У меня нет никакой заинтересованности в маскировке моей личности или анонимном запросе, поэтому любая помощь в том, как лучше всего имитировать обычный просмотр веб-страниц, чтобы передать эту проверку, была бы полезна.

+0

Обратите внимание, что 'urllib2' не выполняет каких-либо JavaScript на всех, так что любое содержимое страницы, которая создается с помощью Javascript не будет появляться в ваших данных. Попробуйте найти стороннюю библиотеку без браузера, которая выполняет JS. – Kevin

+0

Скорее всего, страница использует этот Javascript для загрузки остальной части содержимого в браузере. –

ответ

0

Это потому, что urllib2 не может выполнить javascript, он может загружать только обычный HTML. Чтобы иметь возможность выполнять JavaScript, вам нужно использовать некоторые api для управления веб-браузером, который может выполнять JavaScript.

Некоторые примеры будут:

+0

Вы правы. спасибо за рекомендации - селен отлично работает. – gumbynr

+0

Удивительный, рад, что это помогло. Я определенно предпочитаю использовать селен. – bmcculley

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