Python クローラー入門 (3) -- リクエストを使用して Zhihu API を構築する

零下一度
リリース: 2017-05-27 11:57:48
オリジナル
2013 人が閲覧しました

この記事では、主に Python クローラーの使用と Zhihu API の構築のためのリクエストの使用に関する関連情報を、サンプル コードを通じて詳しく紹介します。それが必要です。以下を見てみましょう。

前書き

リクエストの使用方法は、クローラー シリーズの記事「エレガントな HTTP ライブラリ リクエスト」で紹介されています。今回は、リクエストを使用して Zhihu API を構築します。その機能には、プライベート メッセージの送信、記事のいいね! 、ユーザーのフォローなどがあります。など、ユーザー操作を伴う機能では操作前にログインが必要となるため、この記事を読む前に Python シミュレーション Zhihu ログインについて理解することをお勧めします。ここで、リクエストを使用して Zhihu ログインをシミュレートする方法をすでに知っていると仮定します。

思考分析

プライベート メッセージを送信するプロセスでは、ブラウザーが HTTP リクエストをサーバーに送信します。リクエスト メッセージには、リクエスト URL、リクエスト ヘッダー

Header、リクエスト本文が含まれます。この情報が明らかであれば、リクエストを使用してブラウザがプライベート メッセージを送信するのをシミュレートするのは簡単です。

Chrome ブラウザを開いてユーザーを見つけ、クリックしてプライベート メッセージを送信し、プライベート メッセージのネットワーク リクエスト プロセスを追跡します。

まずリクエストヘッダー情報を見てください

リクエストヘッダーには

cookieのログイン情報が含まれており、ユーザー認証に使用される認可フィールドもあり、このフィールドもcookie (cookie 情報の漏洩を防ぐために、この情報はリクエスト時に保持される必要があります)。

リクエスト URL とリクエスト本文を見てみましょう

リクエスト URL は www.zhihu.com/api/v4/messages、リクエスト メソッドは POST、リクエスト本文は

{"type":"common","content":"你好,我是pythoner","receiver_hash":"1da75b85900e00adb072e91c56fd9149"}
ログイン後にコピー

リクエストボディは json 文字列で、タイプと内容は理解しやすいですが、receiver_hash が何であるかはわかりません。さらに決定する必要がありますが、これはユーザー ID に似たフィールドであると推測する必要があります。

それでは、ユーザーのホームページの URL からユーザーの ID を見つけるにはどうすればよいかという質問が来ます。プライベート メッセージングのプロセス全体を完全にシミュレートするために、特別に Zhihu アカウントを登録しました。

追加の携帯電話番号をお持ちでない場合は、Google を使用して「SMS オンライン受信」を検索してください。インターネット上には、テキスト メッセージを無料でオンライン受信できる携帯電話番号がたくさんあります。アカウント: https://www.zhihu.com/people /xiaoxiaodouzi

まず、トランペット アカウントをフォローして、フォロワーのリストでトランペット アカウントを見つけます。マウスをトランペット アカウントのアバターに移動すると、 HTTP ネットワーク リクエストがあることを確認します。

リクエストの URL は www.zhihu.com/api/v4/members/xiaoxiaodouzi です。この URL の後ろの部分「xiaoxiaodouzi」は、Xiaoxiao ホームページの URL の後ろの部分に相当します。

インターフェースによって返されるデータは、ユーザーの個人公開情報です。

{ 
 ...
 "id":"1da75b85900e00adb072e91c56fd9149",
 "favorite_count":0,
 "voteup_count":0,
 "commercial_question_count":0,
 "url_token":"xiaoxiaodouzi",
 "type":"people",
 "avatar_url":"https://pic1.zhimg.com/v2-ca13758626bd7367febde704c66249ec_is.jpg",
 "is_active":1492224390,
 "name":"\u6211\u662f\u5c0f\u53f7",
 "url":"http://www.zhihu.com/api/v4/people/1da75b85900e00adb072e91c56fd9149",
 "gender":-1
 ...
}
ログイン後にコピー

前に推測したように、プライベート メッセージのreceiver_hash フィールドがユーザーの ID であることが明確にわかります。

コード実装

プライベートメッセージ機能の考え方を明確にしましたので、コード実装は当然のことです。

ユーザー情報

プライベートメッセージインターフェースに必要なreceiver_hash辞書を取得するには、まず、使用されるID値を含むユーザー情報を取得する必要があります。


@need_login
def user(self, url_token):
 """
 获取用户信息,
 :param url_token:
 url_token 是用户主页url中后面部分
 例如: https://www.zhihu.com/people/xiaoxiaodouzi
 url_token 是 xiaoxiaodouzi
 :return:dict
 """
 response = self._session.get(URL.profile(url_token))
 return response.json()
ログイン後にコピー

プライベートメッセージを送信

@need_login
def send_message(self, user_id, content):
 """
 给指定的用户发私信
 :param user_id: 用户ID
 :param content: 私信内容
 """
 data = {"type": "common", "content": content, "receiver_hash": user_id}
 response = self._session.post(URL.message(), json=data)
 data = response.json()
 if data.get("error"):
 self.logger.info("私信发送失败, %s" % data.get("error").get("message"))
 else:
 self.logger.info("发送成功")
 return data
ログイン後にコピー

上記の 2 つのメソッドは、Zhihu というクラスに配置されています。関係する @need_login は、ユーザー認証デコレータです。つまり、このメソッドです。操作するにはログインが必要です。注意していれば、init.py メソッドでヘッダー フィールドを初期化したため、各リクエストでヘッダー フィールドを明示的に指定していないことに気づくかもしれません。

def init(self):
 self._session = requests.session()
 self._session.verify = False
 self._session.headers = {"Host": "www.zhihu.com",
    "Referer": "https://www.zhihu.com/",
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36'
      ' (KHTML, like Gecko) Chrome/56.0.2924.87',
    }
 self._session.cookies = cookiejar.LWPCookieJar(filename=cookie_filename)
 try:
 self._session.cookies.load(ignore_discard=True)
 except:
 pass
ログイン後にコピー

を呼び出して実行します

from zhihu import Zhihu

if name == 'main':
 zhihu = Zhihu()
 profile = zhihu.user("xiaoxiaodouzi")
 _id = profile.get("id")
 zhihu.send_message(_id, "你好,这是来自Python之禅的问候")
ログイン後にコピー

実行が完了すると、トランペットは私が送信したプライベートメッセージを正常に受信しました。

最後に、同様のアイデアに従って、ユーザーをフォローしたり、いいね! したりするなどの機能を実装できます。

【関連おすすめ】

1.

Python クローラー入門 (5) -- 正規表現の例チュートリアル

2. Pythonクローラー入門(4)--HTMLテキスト解析ライブラリBeautifulSoupの詳細説明

3. Pythonクローラー入門(2)--HTTPライブラリリクエスト4. Python クローラーを使用する (1) -- HTTP プロトコルをすぐに理解します

5. Python クローラーを使用して Zhihu ログインをシミュレートする例を共有します

以上がPython クローラー入門 (3) -- リクエストを使用して Zhihu API を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート