プロが教える店舗&オフィスのセキュリティ対策術

urllib2.urlopen('url').read()

上記の方法でhtmlのソースを取得していますが、あるデータにおいて、

ブラウザ上→存在する
ブラウザでソースを表示→存在する
Pythonでソースを取得→存在しない

といった事が起こり、取得出来ないデータがあります。

1. 何故このような事が起こるのか、考えられる原因
2. このデータをPythonで取得する方法はあるか、あるならどんな方法か

以上2点を教えてください。
宜しくお願いいたします。

A 回答 (3件)

1の回答はブラウザとPythonで取得する情報に差異があるという質問を元に回答しているため、


前提条件が勘違いである場合には、そこに書いてある処置を行ってトラブルシューティングを続けていくべきではありません。
念のため。
    • good
    • 0

こんにちは。



http://docs.python.jp/2/howto/urllib2.html
上記URLの「ヘッダ」という項目を参照してください。

1.2.
アクセスしてきたブラウザの情報を参照しソースの出力を制御している可能性があります。
なので上記URLを参考にし適切なヘッダ情報を含めてhttpアクセスすることによりブラウザで表示したときと同じソースが取得できるようになると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/03/24 17:43

まずは原因を特定することかと思います。


ans = urllib2.urlopen('url') みたいな感じで…

考えられる原因:
・urlopenで何らかのエラーが発生している
 (1) urlの中にエンコードが必要な文字列が混ざっている(空白とか)
    → urllib.quote など適切な物を使ってあげる

 (2) 失敗するurlではPythonと違う経路でデータ取得するようにブラウザ側で設定されている
    → Pythonを起動するシェルの環境変数 http_proxy 等の必要な物を設定する
etc.
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/03/24 17:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!