1

Python の urllib2 を使用して、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 応答が返されません。助言がありますか?

4

1 に答える 1

2

ブラウザー内に表示される DOM (HTML ページ) は、HTTP 要求のペイロードではありません。ブラウザーによって HTTP 要求が行われると、ページの複雑さに応じて、いくつかの変換が行われます。基本的なレベルでは、パーサーは、HTML5 解析アルゴリズムによって義務付けられているように、コンテンツを並べ替えたり、再編成したりすることがあります。次に、JS スクリプトと XMLHttpRequests がコンテンツを変更して DOM に追加します。

ブラウザーに表示される DOM が本当に必要な場合は、HTTP クライアントが表示するものだけでなく、ブラウザーが表示するものを取得できるようにするために webdriver を使用することをお勧めします。

それが役に立てば幸い。

于 2013-07-30T02:42:10.420 に答える