我正试图使用Python的urlib2来提取我在Pandora中"喜欢"的曲目的信息。当比较从以下代码中产生的HTML和通过Chrome的inspect元素看到的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响应。有什么建议吗?
您在浏览器中看到的DOM(HTML页面)不是HTTP请求的有效负载。一旦浏览器发出HTTP请求,根据页面的复杂程度,就会发生许多转换。在基本级别上,解析器可能会按照HTML5解析算法的要求对内容进行重新排序和/或重组。然后JS脚本和XMLHttpRequest将修改内容并将其添加到DOM中。
如果您确实需要在浏览器中看到的DOM,那么您可能希望使用网络驱动程序来获取浏览器看到的内容,而不仅仅是HTTP客户端看到的内容。
希望能有所帮助。