我想了解使用urllib2閱讀web內容的不同情況,並且似乎有一些檢查正在阻止我閱讀的gifts.com網站上進行所有的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繼續,如果我去的網站,並查看頁面源代碼。
我對隱藏我的身份或匿名請求沒有任何興趣,所以如何最好地模仿正常的網頁瀏覽以通過此檢查將有所幫助。
注意'urllib2'不執行任何JavaScript可言,使得使用JavaScript不會出現創建的任何頁面內容在你的數據。試着找到一個執行JS的第三方「無頭瀏覽器」庫。 – Kevin
更可能的是,該頁面正在使用該JavaScript來加載瀏覽器中的其餘內容。 –