Heim > Artikel > Backend-Entwicklung > Erste Schritte mit Python-Crawlern (3) – Verwenden von Anfragen zum Erstellen der Zhihu-API
Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zu Python ein, wie Sie mit Crawlern beginnen und Anfragen zum Erstellen der Zhihu-API verwenden. Der Artikel stellt es detailliert anhand von Beispielcode vor Eine große Hilfe für alle. Freunde, die es brauchen, können einen Blick darauf werfen.
Vorwort
Im Crawler-Reihenartikel „Elegante HTTP-Bibliotheksanfragen“ wird die Verwendung von Anfragen vorgestellt Wissen Zu den Funktionen der Hu-API gehören: Senden privater Nachrichten, Liken von Artikeln, Verfolgen von Benutzern usw. Da für jede Funktion, die Benutzeroperationen beinhaltet, eine Anmeldung erforderlich ist, wird empfohlen, Python zu verstehen, um die Zhihu-Anmeldung zu simulieren, bevor Sie diesen Artikel lesen. Nun wird davon ausgegangen, dass Sie bereits wissen, wie Sie Anfragen verwenden, um die Zhihu-Anmeldung zu simulieren.
Ideenanalyse
Der Vorgang des Sendens einer privaten Nachricht besteht darin, dass der Browser eine HTTP-Anfrage an den Server sendet Anfrage-URL und Anfrage-HeaderKopfer und der Anfragetext Solange diese Informationen klar sind, ist es einfach, Anfragen zu verwenden, um das Senden privater Nachrichten durch den Browser zu simulieren.
Öffnen Sie den Chrome-Browser, suchen Sie einen Benutzer, klicken Sie, um eine private Nachricht zu senden, und verfolgen Sie den Netzwerkanforderungsprozess der privaten Nachricht.
Schauen Sie sich zunächst die Informationen im Anforderungsheader an
Der Anforderungsheader enthält CookieAnmeldeinformationen. Darüber hinaus gibt es auch ein Autorisierungsfeld, das zur Benutzerauthentifizierung verwendet wird. Gleichzeitig wird dieses Feld auch in Cookies gespeichert (um zu verhindern, dass Cookie-Informationen durchsickern, habe ich ein Mosaik erstellt). wenn Anfragen gestellt werden.
Werfen wir einen Blick auf die Anfrage-URL und den Anfragetext
Die Anfrage-URL lautet www.zhihu.com/api/ v4/messages, die Anforderungsmethode ist POST, der Anforderungstext
{"type":"common","content":"你好,我是pythoner","receiver_hash":"1da75b85900e00adb072e91c56fd9149"}
Der Anforderungstext ist eine JSON-Zeichenfolge, der Typ und der Inhalt sind leicht zu verstehen, aber ich weiß nicht, was Receiver_Hash ist und was ich brauche muss noch näher bestimmt werden, aber Sie sollten es erraten können. Dies ist ein Feld, das der Benutzer-ID ähnelt.
Nun stellt sich also die Frage: Wie finde ich die Benutzer-ID über die URL der Homepage des Benutzers? Um den gesamten Prozess des privaten Versendens vollständig zu simulieren, habe ich speziell ein Zhihu-Konto registriert.
Wenn Sie keine zusätzliche Mobiltelefonnummer haben, können Sie mit Google nach „SMS online empfangen“ suchen. Es gibt viele Mobiltelefonnummern im Internet, die den kostenlosen Online-Empfang von SMS ermöglichen Homepage meines registrierten Kontos: https://www.zhihu.com/people/xiaoxiaodouzi
Versuchen Sie zunächst, dem Trompetenkonto zu folgen, und finden Sie dann das Trompetenkonto in der Liste, der ich folge, wenn ich die Maus bewege Beim Avatar des Trumpet-Kontos stelle ich fest, dass es eine HTTP-Netzwerkanfrage gibt.
Die Anforderungs-URL lautet www.zhihu.com/api/v4/members/xiaoxiaodouzi. Der hintere Teil dieser URL „xiaoxiaodouzi“ entspricht dem hinteren Teil der Trompete Homepage-URL. Diesen Teil nennen wir url_token. Die von der
-Schnittstelle zurückgegebenen Daten sind die persönlichen öffentlichen Informationen des Benutzers.
{ ... "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 ... }
Wir können deutlich sehen, dass es ein ID-Feld gibt. Wie wir bereits vermutet haben, ist das Receiver_Hash-Feld in der privaten Nachricht die ID des Benutzers.
Code-Implementierung
An dieser Stelle haben wir die Idee der Privatnachrichtenfunktion geklärt, und die Code-Implementierung ist eine Selbstverständlichkeit .
Benutzerinformationen
Um das für die private Nachrichtenschnittstelle erforderliche Receiver_Hash-Wörterbuch zu erhalten, müssen wir zunächst die Benutzerinformationen abrufen enthält die ID für den Wert.
@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()
Senden Sie eine private Nachricht
@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
Die beiden oben genannten Methoden werden eingefügt einer namens Zhihu In der Klasse habe ich nur die Schlüsselcodes aufgelistet. Der beteiligte @need_login ist ein Benutzerauthentifizierungsdekorator, der darauf hinweist, dass diese Methode eine Anmeldung erfordert, bevor sie ausgeführt werden kann. Wenn Sie vorsichtig sind, stellen Sie möglicherweise fest, dass ich das Header-Feld nicht in jeder Anfrage explizit angegeben habe, da ich es in der Methode init.py initialisiert habe.
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
Aufrufen und ausführen
from zhihu import Zhihu if name == 'main': zhihu = Zhihu() profile = zhihu.user("xiaoxiaodouzi") _id = profile.get("id") zhihu.send_message(_id, "你好,这是来自Python之禅的问候")
Nach Abschluss der Ausführung hat die Trompete die von mir gesendete private Nachricht erfolgreich empfangen.
Schließlich können wir einer ähnlichen Idee folgen, um Funktionen wie das Folgen und Liken von Benutzern zu implementieren.
[Verwandte Empfehlungen]
1. Erste Schritte mit Python-Crawlern (5) – Beispiel-Tutorial für reguläre Ausdrücke
3. Erste Schritte mit Python-Crawlern (2) – HTTP-Bibliotheksanfragen
4. Einführung in den Python-Crawler (1) – Schnelles Verständnis des HTTP-Protokolls
5. Teilen Sie ein Beispiel für die Verwendung von Python Crawler zur Simulation der Zhihu-Anmeldung
Das obige ist der detaillierte Inhalt vonErste Schritte mit Python-Crawlern (3) – Verwenden von Anfragen zum Erstellen der Zhihu-API. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!