2013-07-27 28 views
1

我正在嘗試使用Python的urllib2來提取我在潘多拉的「喜歡的」曲目上的信息。我得到的數據差異在比較HTML從下面的代碼產生並通過Chrome的檢查元素看到的HTML:使用python從潘多拉歌曲中提取「喜歡的」歌曲

import urllib2 

headers={ 'User-Agent' : 'Mozilla/5.0' } 

url='http://www.pandora.com/profile/likes/myusername' 

request=urllib2.Request(url,None,headers) 
response = urllib2.urlopen(request) 
html = response.read() 

我想這可能是由於缺乏驗證的,即使我仍然能夠使用Chrome的隱身模式加載註銷的相同頁面。

所以我添加以下行來嘗試對我的要求使用基本身份驗證:

SERVER='pandora.com' 
authinfo = urllib2.HTTPPasswordMgrWithDefaultRealm() 
authinfo.add_password(None, SERVER, "login", "password") 
handler=urllib2.HTTPBasicAuthHandler(authinfo) 
myopener=urllib2.build_opener(handler) 
opened=urllib2.install_opener(myopener) 

headers={ 'User-Agent' : 'Mozilla/5.0' } 

url='http://www.pandora.com/profile/likes/chris.r.armstrong' 

request=urllib2.Request(url,None,headers) 
response = urllib2.urlopen(request) 
html = response.read() 

仍然沒有得到正確的HTML響應返回。有什麼建議麼?

回答

2

您在瀏覽器中看到的DOM(HTML頁面)不是HTTP請求的有效載荷。一旦瀏覽器發出HTTP請求,取決於頁面的複雜程度,會發生許多轉換。在基本層面上,解析器可能按照HTML5解析算法的要求重新排序和/或重新組織內容。然後,JS腳本和XMLHttpRequests將修改並向DOM添加內容。

如果您確實需要在瀏覽器中看到的DOM,您可能需要使用webdriver才能找回瀏覽器看到的內容,而不僅僅是HTTP客戶端看到的內容。

希望它有幫助。