• 締切済み

Pythonで、htmlソースを取得した時

urllib2.urlopen('url').read() 上記の方法でhtmlのソースを取得していますが、あるデータにおいて、 ブラウザ上→存在する ブラウザでソースを表示→存在する Pythonでソースを取得→存在しない といった事が起こり、取得出来ないデータがあります。 1. 何故このような事が起こるのか、考えられる原因 2. このデータをPythonで取得する方法はあるか、あるならどんな方法か 以上2点を教えてください。 宜しくお願いいたします。

みんなの回答

  • 777_kenyu
  • ベストアンサー率68% (22/32)
回答No.3

1の回答はブラウザとPythonで取得する情報に差異があるという質問を元に回答しているため、 前提条件が勘違いである場合には、そこに書いてある処置を行ってトラブルシューティングを続けていくべきではありません。 念のため。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 http://docs.python.jp/2/howto/urllib2.html 上記URLの「ヘッダ」という項目を参照してください。 1.2. アクセスしてきたブラウザの情報を参照しソースの出力を制御している可能性があります。 なので上記URLを参考にし適切なヘッダ情報を含めてhttpアクセスすることによりブラウザで表示したときと同じソースが取得できるようになると思います。

bombrea
質問者

お礼

回答有難うございます。すみません、ブラウザのソースには存在すると書きましたが、実際は違いました。ブラウザには表示されていますが、「ソースを表示」で確認すると存在しませんでした。該当箇所をChromeで選択して「要素を検証」すると存在するため、勘違いしていました。正しくはブラウザ上→存在する ブラウザでソースを表示→存在しない Pythonでソースを取得→存在しない です。 その後色々にらめっこして、多分・・ブラウザがJavascriptで表示させているデータかと今は予想しています。なんとかJavascriptの実行結果を得る方法で模索してみたいと思います。 教えていただいたヘッダ情報は設定していなかったので、これからは設定した上で続けていこうと思います。 有難うございました。

  • 777_kenyu
  • ベストアンサー率68% (22/32)
回答No.1

まずは原因を特定することかと思います。 ans = urllib2.urlopen('url') みたいな感じで… 考えられる原因: ・urlopenで何らかのエラーが発生している  (1) urlの中にエンコードが必要な文字列が混ざっている(空白とか)     → urllib.quote など適切な物を使ってあげる  (2) 失敗するurlではPythonと違う経路でデータ取得するようにブラウザ側で設定されている     → Pythonを起動するシェルの環境変数 http_proxy 等の必要な物を設定する etc.

bombrea
質問者

お礼

回答有難うございます。すみません、ブラウザのソースには存在すると書きましたが、実際は違いました。ブラウザには表示されていますが、「ソースを表示」で確認すると存在しませんでした。該当箇所をChromeでドラッグ・選択して「要素を検証」すると存在するため、勘違いしていました。正しくはブラウザ上→存在する ブラウザでソースを表示→存在しない Pythonでソースを取得→存在しない です。 その後色々にらめっこして、多分・・ブラウザがJavascriptで表示させているデータかと今は予想しています。なんとかJavascriptの実行結果を得る方法で模索してみたいと思います。 教えていただいた環境変数は設定していなかったので、これからは設定した上で続けていこうと思います。 有難うございました。

関連するQ&A