2016-03-02 54 views
1

我想了解使用urllib2閱讀web內容的不同情況,並且似乎有一些檢查正在阻止我閱讀的gifts.c​​om網站上進行所有的html。蟒蛇 - 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 

我在過去類似的問題,但能夠通過添加「用戶代理」頭修復它,但是這似乎是一些被禁止訪問的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的Web瀏覽器。

一些例子是:

+0

你是對的。感謝您的建議 - 硒工作很好。 – gumbynr

+0

太棒了,很高興幫助。我絕對更喜歡使用硒。 – bmcculley