【问题标题】:Extract "Liked" songs from Pandora using python使用 python 从 Pandora 中提取“喜欢”的歌曲
【发布时间】:2013-07-27 19:03:28
【问题描述】:

我正在尝试使用 Python 的 urllib2 来提取我在 Pandora 中“喜欢”的曲目的信息。在比较从以下代码产生的 HTML 和通过 Chrome 的检查元素看到的 HTML 时,我发现了差异:

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 响应。有什么建议吗?

【问题讨论】:

    标签: python-2.7 urllib2 pandora


    【解决方案1】:

    您在浏览器内部看到的 DOM(HTML 页面)并不是 HTTP 请求的有效负载。浏览器发出 HTTP 请求后,根据页面的复杂程度,会发生许多转换。在基本级别,解析器可能会按照 HTML5 解析算法的要求重新排序和/或重新组织内容。然后 JS 脚本和 XMLHttpRequests 将修改并向 DOM 添加内容。

    如果您确实需要在浏览器中看到的 DOM,您可能希望使用 webdriver 来获取浏览器看到的内容,而不仅仅是 HTTP 客户端看到的内容。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2018-08-23
      • 1970-01-01
      相关资源
      最近更新 更多