1

我正在尝试使用 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 响应。有什么建议么?

4

1 回答 1

2

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

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

希望能帮助到你。

于 2013-07-30T02:42:10.420 回答