ホームページ バックエンド開発 PHPチュートリアル クローラーを使用して Zhihu コンテンツのデータをクロールすると 403 の問題が発生するのはなぜですか?

クローラーを使用して Zhihu コンテンツのデータをクロールすると 403 の問題が発生するのはなぜですか?

Aug 17, 2016 am 10:01 AM
curl post

Zhihu でユーザーのフォロー情報 (A が誰をフォローしているかを確認するなど) をキャプチャし、ページ www.zhihu.com/people/XXX/followees からフォロワーのリストを取得したいと考えていますが、キャプチャ中に 403 の問題が発生しました。
1. クローラーはユーザーの注目情報を収集するためのみであり、学術研究を目的としたものではありません。
2. PHP を使用してリクエストを作成し、simple_html_dom を使用してドキュメントを解析します。フォロワー (フォロワー) リストでは、より多くのフォロワーを動的に読み込むために Ajax を使用する必要があるため、インターフェイス データを直接クロールして、より多くのフォロワーの読み込みが
http://www.zhihu を通じて行われることがわかります。 com/node/ProfileFolloweesListV2、投稿データには _xsrf、method、parmas が含まれているため、ログインしたままの状態で、投稿に必要なパラメーターを指定してこのリンクにリクエストを送信しましたが、403 でした。が返されます。 4. ただし、ログインをシミュレートする場合、いいねや感謝の数などのデータも解析できます。
5. リクエスト ヘッダーを設定するために、curl_setopt($ch, CURLOPT_HTTPHEADER, $header); を使用します。リクエストヘッダーはブラウザで送信したリクエストヘッダーと一致しますが、それでも 403 エラーが発生しました
6.curl リクエストヘッダーを出力して、ブラウザーによって送信されたリクエストヘッダーと比較しようとしましたが、正しい方法が見つかりませんでした (Baidu では、curl_getinfo() が対応するメッセージを出力するようです)
7. User-Agent または X-Requested-With が設定されていないため、多くの人が 403 に遭遇しましたが、私はリクエストを設定するときに設定しました。 5
8で説明したヘッダー。説明が不明瞭でコードを投稿する必要がある場合は、コードを投稿できます
9。このクローラーは卒業制作の一部であり、次の作品用にデータを取得する必要があります。データのクロールは純粋に学術研究のためです
返信内容:

サーバーにファイアウォール機能がある場合、プロキシ サーバーを多数設置しない限り、継続的なクロールが強制終了される可能性があります。または、最も簡単な方法は、adsl を使用して常にリダイヤルし、ip を変更することです。 まずブラウザを見つけて、リクエストの HTTP ヘッダーを調べてから、リクエストを取得します。 過去 2 日間で、Python を使用してユーザーのフォローとフォロワーを捕捉するクローラーを作成したばかりです。これは Python コードの一部です。コードを見てコードの問題を確認できます。

403 は、リクエスト中に一部のデータが誤って送信されたことを意味します。次のコードにはオープン テキストが含まれており、テキスト内のコンテンツ スタイルのスクリーンショットを撮って最後に追加しました。
りー それは、useragent、リファラー、トークン、クッキーにすぎません。 原因としては次の 2 つが考えられます:
  1. Cookie がない
  2. _xsrf または hash_id エラー
Zhihu は、「_xsrf」フィールドに小さな変更を加えました。これは、ホームページから取得された _xsrf 値ではなく、ログインに成功した後に Cookie を介して返される「_xsrf」値です。正しい値を取得します。そうでない場合は、常に 403 エラーが報告されます (Post が質問したときにこれを知りました。同様の問題が発生すると思うので、コードに直接アクセスしてください):

///
/ // 志胡の質問
///

/// 質問のタイトル
/// 詳細内容< ;/param>
/// ログイン後に取得されるCookie
public void ZhiHuFaTie(string question_title,string question_detail,CookieContainer cookie)
{
question_title="質問内容" ;
question_detail="質問の詳細な説明";

//Cookie を走査し、_xsrf の値を取得します
var list = GetAllCookies(cookie);
foreach (var item in list)
{
if (item.Name = = " _xsrf")
{
xsrf = item.Value;
Break;
}
}
//Post
var FaTiePostUrl = "zhihu.com/question/add" ;
var dd = topicStr.ToCharArray();
var FaTiePostStr = "question_title=" + HttpUtility.UrlEncode(question_title) + "&question_detail=" + HttpUtility.UrlEncode(question_detail) + "&anon=0&topic_ids=" + topicId + "&new_topics =&_xsrf ="+xsrf;
var FaTieResult = nhp.PostResultHtml(FaTiePostUrl, cookie, "http://www.zhihu.com/", FaTiePostStr);
}


///
// / トラバースCookieContainer
///

///
///
public static List (CookieContainer cc)
{
List lstCookies = new List();

ハッシュテーブル テーブル = (Hashtable)cc.GetType().InvokeMember("m_domainTable",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField |
System.Reflection.BindingFlags.Instance, null, cc, new object[] { });

foreach (object pathList in table.Values)
{
SortedList lstCookieCol = (SortedList )pathList .GetType().InvokeMember("m_list",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField
| System.Reflection.BindingFlags.Instance, null, pathList, new object[] { }) ;
foreach (lstCookieCol.Values の CookieCollection ColCookies)
foreach (colCookies の Cookie c) lstCookies.Add(c);
}
return lstCookies;
} ヘッダーの X-Forwarded-For フィールドを変更して IP アドレスを偽装します。 なんという偶然でしょう、昨夜この問題に遭遇したばかりです。理由はたくさんあるかもしれませんが、参考までに、またアイデアを提供するために、私が遭遇したことだけをお話しします。私は新浪微博をクロールしてプロキシを使用しました。アクセス時にWebサイトが拒否されるため403が表示されます。ブラウザで同じことを行うと、いくつかのWebページを見るだけで403が表示されますが、何度か更新すれば問題ありません。コード内の実装では、複数回リクエストを実行します。 上記の回答を読んだ後、私はすぐに愕然としました。素晴らしい人はたくさんいますが、リー・カイフーに聞いてみることをお勧めします〜笑 インターフェイスがどのようにキャッチされるかについて話しましょう... Firebug でインターフェイスをキャッチできないのはなぜですか? Chrome のネットワークでもインターフェイスをキャッチできません
そういえば、フォロワーに直接リクエストすることで直接取得できます。 。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PythonでCURLリクエストとPythonリクエストの相互変換を実現する方法 PythonでCURLリクエストとPythonリクエストの相互変換を実現する方法 May 03, 2023 pm 12:49 PM

curl と Pythonrequests は両方とも、HTTP リクエストを送信するための強力なツールです。 curl はターミナルから直接リクエストを送信できるコマンドライン ツールですが、Python のリクエスト ライブラリは、Python コードからリクエストを送信するためのよりプログラム的な方法を提供します。 curl を Pythonrequestscurl コマンドに変換するための基本的な構文は次のとおりです。curl[OPTIONS]URLcurl コマンドを Python リクエストに変換する場合、オプションと URL を Python コードに変換する必要があります。これは、curlPOST コマンドの例です:curl-XPOST https://example.com/api

Linux での CURL バージョンの更新に関するチュートリアル! Linux での CURL バージョンの更新に関するチュートリアル! Mar 07, 2024 am 08:30 AM

Linux でカールのバージョンを更新するには、以下の手順に従います。 現在のカールのバージョンを確認します。 まず、現在のシステムにインストールされているカールのバージョンを確認する必要があります。ターミナルを開き、次のコマンドを実行します。curl --version このコマンドは、現在のcurlバージョン情報を表示します。利用可能なcurlのバージョンを確認する:curlを更新する前に、利用可能な最新バージョンを確認する必要があります。 Curl の公式 Web サイト (curl.haxx.se) または関連ソフトウェア ソースにアクセスして、curl の最新バージョンを見つけることができます。 Curl ソース コードをダウンロードする:curl またはブラウザを使用して、選択した CURL バージョンのソース コード ファイル (通常は .tar.gz または .tar.bz2) をダウンロードします。

最初から最後まで: PHP 拡張機能 cURL を使用して HTTP リクエストを行う方法 最初から最後まで: PHP 拡張機能 cURL を使用して HTTP リクエストを行う方法 Jul 29, 2023 pm 05:07 PM

最初から最後まで: HTTP リクエストに php 拡張機能 cURL を使用する方法 はじめに: Web 開発では、多くの場合、サードパーティ API または他のリモート サーバーと通信する必要があります。 cURL を使用して HTTP リクエストを行うのは、一般的で強力な方法です。この記事では、PHP を使用して cURL を拡張して HTTP リクエストを実行する方法を紹介し、いくつかの実用的なコード例を示します。 1. 準備 まず、php に cURL 拡張機能がインストールされていることを確認します。コマンドラインで php-m|grepcurl を実行して確認できます。

PHP8.1 リリース: 複数リクエストの同時処理のためのcurlの導入 PHP8.1 リリース: 複数リクエストの同時処理のためのcurlの導入 Jul 08, 2023 pm 09:13 PM

PHP8.1 リリース: 複数リクエストの同時処理のためのcurlの導入 最近、PHPは最新バージョンのPHP8.1を正式にリリースし、重要な機能である複数リクエストの同時処理のためのcurlを導入しました。この新機能により、開発者は複数の HTTP リクエストをより効率的かつ柔軟に処理できるようになり、パフォーマンスとユーザー エクスペリエンスが大幅に向上します。以前のバージョンでは、複数のリクエストを処理するには、多くの場合、複数の CURL リソースを作成し、ループを使用してデータをそれぞれ送受信する必要がありました。この方法でも目的は達成できますが、

PHP Curl で Web ページの 301 リダイレクトを処理するにはどうすればよいですか? PHP Curl で Web ページの 301 リダイレクトを処理するにはどうすればよいですか? Mar 08, 2024 am 11:36 AM

PHPCurl で Web ページの 301 リダイレクトを処理するにはどうすればよいですか? PHPCurl を使用してネットワーク リクエストを送信すると、Web ページから返される 301 ステータス コードが頻繁に発生します。これは、ページが永続的にリダイレクトされたことを示します。この状況を正しく処理するには、いくつかの特定のオプションと処理ロジックを Curl リクエストに追加する必要があります。以下では、PHPCurl で Web ページの 301 リダイレクトを処理する方法を詳しく紹介し、具体的なコード例を示します。 301 リダイレクトの処理原則 301 リダイレクトとは、サーバーが 30 を返すことを意味します。

Linuxカールとは何ですか Linuxカールとは何ですか Apr 20, 2023 pm 05:05 PM

Linux では、curl はサーバーとの間でデータを転送するための非常に実用的なツールです。これは、コマンド ラインで動作する URL ルールを使用するファイル転送ツールです。ファイルのアップロードとダウンロードをサポートし、包括的な転送ツールです。 Curl は、プロキシ アクセス、ユーザー認証、ftp アップロードとダウンロード、HTTP POST、SSL 接続、Cookie サポート、ブレークポイント再開などの非常に便利な機能を多数提供します。

ページにジャンプするパラメータを含む PHP の POST メソッドの簡単な分析 ページにジャンプするパラメータを含む PHP の POST メソッドの簡単な分析 Mar 23, 2023 am 09:15 AM

PHP 開発者にとって、POST を使用してパラメータのあるページにジャンプすることは基本的なスキルです。 POST は HTTP でデータを送信する方法で、HTTP リクエストを通じてサーバーにデータを送信できます。ジャンプ ページはサーバー側でページを処理してジャンプします。実際の開発では、特定の機能上の目的を達成するために、パラメーターを指定して POST を使用してページにジャンプする必要があることがよくあります。

Pythonリクエストポストの使い方 Pythonリクエストポストの使い方 Apr 29, 2023 pm 04:52 PM

Python はブラウザーによるポスト リクエストの送信をシミュレートします importrequests 形式 request.postrequest.post(url,data,json,kwargs)#ポスト リクエストの形式 request.get(url,params,kwargs)#get リクエストと比較して、ポスト リクエストの送信パラメータは次のように分割されますForms ( x-www-form-urlencoded) json (application/json) データ パラメーターは、辞書形式と文字列形式をサポートしています。辞書形式は、 json.dumps() メソッドを使用して、データを有効な JSON 形式の文字列に変換します。このメソッドには、次のものが必要です

See all articles