クローラーを使用して Zhihu コンテンツのデータをクロールすると 403 の問題が発生するのはなぜですか?
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 は、リクエスト中に一部のデータが誤って送信されたことを意味します。次のコードにはオープン テキストが含まれており、テキスト内のコンテンツ スタイルのスクリーンショットを撮って最後に追加しました。- Cookie がない
- _xsrf または hash_id エラー
///
/ // 志胡の質問
///
/// 質問のタイトル
/// 詳細内容< ;/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 = "http://www.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
{
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 のネットワークでもインターフェイスをキャッチできません
そういえば、フォロワーに直接リクエストすることで直接取得できます。 。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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 形式の文字列に変換します。このメソッドには、次のものが必要です
