2016-05-26 9 views
1

私はPythonでウェブサイトのHTMLソースを取得しようとしています。しかし、サイト上の任意のページにアクセスすると、ローディング画面のように遅延リダイレクトが発生します。私がrequests.get(url)を行うたびに、そのローディング画面をつかむことになります。私はリクエストライブラリを使用しています。リダイレクト後にリクエストを待つ方法はありますか?リダイレクトは約3秒です。ここで遅延リダイレクト後にHTMLソースを取得する

は、私が使用するコードです:

import Requests 
page = requests.get(url) 
print(page.text) 
+0

サイトが読み込み画面の後にコンテンツをレンダリングするためにjavascriptを使用している場合、リクエストはこれに最適なツールではない可能性があります。あなたは、あなたがソースを取得したいウェブサイトのURLを持っていますか? – kanghj91

+0

リダイレクトは、ブラウザがJavascriptコードを実行するため、ブラウザ*で実行される可能性が高いです。ヘッドレスブラウザを使用して同じことをするか、javascriptをリバースエンジニアリングして宛先を直接ロードします。 –

+0

URLは何ですか? –

答えて

1

リダイレクトは、おそらくサーバーではなく、ブラウザで行われます。よくある2つの方法があります:"meta refresh"またはJavascript。

前者の場合は、BeautifulSoupなどのHTML応答を解析し、メタリフレッシュタグを調べて、目的のURLを抽出してから、2番目のリクエストで検索します。

リダイレクトを行う方法がたくさんあるので、リダイレクトをJavascriptで実行すると難しくなります。

いずれにしてもちょっと面倒なので、基本的にはブラウザにスクリプトを付けて、ブラウザにメタリフレッシュ/ javascriptリダイレクトをさせることができるseleniumのようなものを使用するのが最善の方法です。

+0

セレンを使用し、 'driver.page_source'からhtmlソースを印刷しようとすると、エラーが発生します。 '[PY3] C:\ユーザーはエヴァン\ PythonProjects>のpython test.py トレースバック(最新の呼び出しの最後):\ プリント(html_source) ファイル「Cで、9行、 ファイル "test.pyを" :\ Users \ Evan \ Miniconda3 \ envs \ Py3 \ lib \ encodings \ cp437.py "、行19、e ncode return codecs.charmap_encode(input、self.errors、encoding_map)[0] UnicodeEncodeError: 'charmap 'コーデックは文字「\ u2026」を位置にエンコードすることができません 7006:文字はにマップされます – Gamegoofs2

+0

端末のエンコーディングで' \ u2026 '(水平省略記号)を表すことができないため、これはcp437です。 Windows-1251やUTF-8などの最新のターミナルエンコーディングを使用します。 HTMLソースを印刷する代わりに、代わりにファイルに書き込んでください。それからあなたはそれを検査することができるはずです。 – mhawke

+0

あるいは 'import codec'は' page.encode( 'utf-8') 'を使ってhtmlを出力します。 – Gamegoofs2

-1

デフォルトの自動特性リダイレクトオフにし、リダイレクト先

を保存する場所を要求によってr.historyに示されているウェブページを対象ページを取得することができます
関連する問題