2013-07-27 1 views
1

Я пытаюсь использовать urlib2 для Python для извлечения информации о моих «любимых» треках в Pandora. Я получаю discrepencies при сравнении HTML получено из следующего кода и HTML видел через Хром инспектировать элемент:Извлечение песен «Понравилось» из Pandora с использованием 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.

Надеюсь, это поможет.