[解決済み] python requests.get は常に 404 を返します。
質問
リクエストの送信を試してみたいのですが、このようになります。 ウェブサイト :
requests.get('https://rent.591.com.tw')
で、いつも
<Response [404]>
これはよくある問題だと思い、別の方法を試してみましたが、やはりダメでした。 しかし、他のすべてのウェブサイトは大丈夫です。
何か提案はありますか?
解決方法は?
ウェブサーバーはブラックボックスです。彼らは、あなたのリクエスト、一日の時間、月の満ち欠け、あるいは彼らが選ぶ他の基準に基づいて、どんな有効なHTTPレスポンスでも返すことが許されているのです。もし他のHTTPクライアントが一貫して異なるレスポンスを返してきたら、Pythonが送るリクエストと他のクライアントが送るリクエストの間にどんな違いがあるのかを探ってみてください。
つまり、必要なのは
- 作業依頼のすべての側面を記録する
- 失敗したリクエストのすべての側面を記録する
- 失敗したリクエストをより動作中のリクエストに近づけるために、どのような変更が可能かを試し、それらの変更を最小にします。
私は通常、リクエストに http://httpbin.org のエンドポイントを取得し、リクエストを記録し、そして実験する。
について
requests
のように、自動的に設定されるヘッダーがいくつかあり、これらの多くは通常、変更する必要がないと思われます。
-
Host
;これ 必須 を連絡先のホスト名に設定することで、異なるサイトを適切にマルチホストすることができます。requests
はこれを設定します。 -
Content-Length
とContent-Type
に渡す引数から設定されます。requests
. もしこれらが一致しない場合は、以下のようにrequests
(ただしmultipart/*
リクエストで、これはContent-Type
). -
requests
: これはクライアントに管理を任せる -
Connection
これらは、最初のGETリクエスト時や、サイトに最初にログインした後に設定されることが多いようです。クッキーの取得にはCookies
オブジェクト と、ログインしていること(ブラウザと同じ方法でクレデンシャルを提供)。
それ以外のものは公平に扱われますが、もし
requests.Session()
がデフォルト値を設定している場合、多くの場合、そのデフォルト値は問題ではありません。とはいえ、私は通常、User-Agentヘッダーから始めて、そこから上へ上へと作業を進めます。
この場合、サイトがユーザーエージェントでフィルタリングしているため、ブラックリスト化しているように見えます。
requests
に設定し、それを
ほとんどすべての値
はすでに動作しています。
Python
次に
>>> requests.get('https://rent.591.com.tw', headers={'User-Agent': 'Custom'})
<Response [200]>
は
ブラウザではない
.
requests
は単なるHTTPクライアントであり、ブラウザはもっともっと多くのことを行います。ブラウザは HTML を解析して画像、フォント、スタイル、スクリプトなどの追加リソースを探し、それらの追加リソースもロードして、スクリプトを実行します。スクリプトは、ブラウザの表示内容を変更したり、追加のリソースを読み込んだりすることができます。もし
requests
の結果は、ブラウザで見るものと一致しませんが
ブラウザが行う最初のリクエストは
の場合、ブラウザが他にどんなリソースを読み込んでいるかを把握し、追加で
requests
必要に応じて もし、すべてがうまくいかなければ、次のようなプロジェクトを使用します。
requests
これを使えば、実際のヘッドレスブラウザである Chromium ブラウザで URL を実行することができます。
連絡しようとしているサイトは、追加のAJAXリクエストを
requests-html
このサイトからデータをスクレイピングしようとしている場合は、そのことを考慮してください。
次に、よくできたサイトでは、次のようなセキュリティのベストプラクティスが使用されています。 CSRFトークン これは、正しい順序でリクエストを行い (例えば、ハンドラへの POST の前にフォームを取得するための GET リクエスト)、クッキーを処理するか、サーバがあるリクエストから別のリクエストに渡されることを期待する余分な情報を抽出することを要求します。
最後になりますが、サイトがスクリプトのリクエストをブロックしている場合、おそらくスクレイピングを禁止する利用規約を実施しようとしているか、あるいはむしろあなたに使ってもらいたいAPIがあるためでしょう。いずれにせよ、そのサイトをスクレイピングし続ければ、より効果的にブロックされる可能性があることを考慮に入れて、チェックしてみてください。
関連
-
Python 入出力と高次代入の基礎知識
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
pythonを使ったオフィス自動化コード例
-
python call matlab メソッドの詳細
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない