この記事では、主に 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"}
インターフェースによって返されるデータは、ユーザーの個人公開情報です。
{ ... "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値を含むユーザー情報を取得する必要があります。@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
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之禅的问候")
Python クローラー入門 (5) -- 正規表現の例チュートリアル
2. Pythonクローラー入門(4)--HTMLテキスト解析ライブラリBeautifulSoupの詳細説明
3. Pythonクローラー入門(2)--HTTPライブラリリクエスト4. Python クローラーを使用する (1) -- HTTP プロトコルをすぐに理解します
5. Python クローラーを使用して Zhihu ログインをシミュレートする例を共有します
以上がPython クローラー入門 (3) -- リクエストを使用して Zhihu API を構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。