這篇文章主要給大家介紹了關於python爬蟲入門之利用requests構建知乎API的相關資料,文中透過範例程式碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
前言
在爬蟲系列文章優雅的HTTP庫requests 中介紹了requests 的使用方式,這次我們用requests 建立一個知乎API,功能包括:私訊傳送、文章按讚、使用者追蹤等,因為任何涉及使用者操作的功能都需要登入後才可操作,所以在閱讀這篇文章前建議先了解Python模擬知乎登入。現在假設你已經知道如何用 requests 模擬知乎登入了。
思路分析
發送私訊的過程就是瀏覽器傳送一個HTTP 請求,請求封包包含請求URL、請求頭Header、還有請求體Body,只要把這些資訊弄清楚,那麼就很容易用requests 來模擬瀏覽器發送私訊了。
打開 Chrome 瀏覽器,隨便找一個用戶,點擊發送私訊,追蹤一下私訊的網路請求流程。
先看下請求頭資訊
#請求頭Header 中有cookies 登入訊息,此外還有一個authorization 字段,該字段是用於用戶認證的,同時這個字段也存在cookies 中(為了防止cookie 資訊洩露,我打了馬賽克), requests 請求時這些資訊都必須攜帶上。
再來看看請求的URL和請求體
#請求URL是www.zhihu.com/api/v4/messages ,請求方法是POST,請求體
{"type":"common","content":"你好,我是pythoner","receiver_hash":"1da75b85900e00adb072e91c56fd9149"}
請求體是一個json 字串,type 和content 很好理解,但receiver_hash 是什麼並不知道,需要進一步確定,不過你應該猜得出這是類似於使用者id 的欄位。
那麼現在問題來了,要如何透過使用者首頁的URL找到使用者的 id 呢?為了完整的模擬私訊的整個流程,我特地註冊了一個知乎小號。
如果你手邊沒有多餘的手機號,可以用Google 搜尋「receive sms online」,網路上很多提供免費線上簡訊的手機號碼,我註冊的小號首頁:https://www.zhihu .com/people/xiaoxiaodouzi
先試著關注小號,然後在我關注的清單中找到該小號,把滑鼠移到小號的頭像處時,發現有一個HTTP 網路請求。
請求url 是www.zhihu.com/api/v4/members/xiaoxiaodouzi ,這個URL的後面部分「xiaoxiaodouzi」對應小號主頁URL的後面部分,這部分我們稱之為url_token。
介面的回傳資料是該使用者的個人公開資訊。
{ ... "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 ... }
我們可以很清楚的看到有id的字段,跟我們之前猜測的一樣,私訊裡面的 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
上面兩個方法放在一個叫Zhihu的類別裡面,我只列出了關鍵程式碼,涉及的@need_login 是一個用戶認證的裝飾器,表示該方法需要登入後才能操作。細心的你可能發現,每個請求中我並沒有顯示地指定 Header 字段,那時因為我把它放在 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之禅的问候")
執行完成後,小號成功收到我發送的私訊。
最後,我們可以按照類似的思路把關注用戶,按讚等功能實現了。
【相關推薦】
2. python爬蟲入門(4)--詳解HTML文字的解析庫BeautifulSoup
3. python爬蟲入門(2)--HTTP庫requests
以上是python爬蟲入門(3)--利用requests建構知乎API的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和C 在内存管理和控制方面的差异显著。1.Python使用自动内存管理,基于引用计数和垃圾回收,简化了程序员的工作。2.C 则要求手动管理内存,提供更多控制权但增加了复杂性和出错风险。选择哪种语言应基于项目需求和团队技术栈。

Python在科學計算中的應用包括數據分析、機器學習、數值模擬和可視化。 1.Numpy提供高效的多維數組和數學函數。 2.SciPy擴展Numpy功能,提供優化和線性代數工具。 3.Pandas用於數據處理和分析。 4.Matplotlib用於生成各種圖表和可視化結果。

選擇Python還是C 取決於項目需求:1)Python適合快速開發、數據科學和腳本編寫,因其簡潔語法和豐富庫;2)C 適用於需要高性能和底層控制的場景,如係統編程和遊戲開發,因其編譯型和手動內存管理。

Python在數據科學和機器學習中的應用廣泛,主要依賴於其簡潔性和強大的庫生態系統。 1)Pandas用於數據處理和分析,2)Numpy提供高效的數值計算,3)Scikit-learn用於機器學習模型構建和優化,這些庫讓Python成為數據科學和機器學習的理想工具。

每天學習Python兩個小時是否足夠?這取決於你的目標和學習方法。 1)制定清晰的學習計劃,2)選擇合適的學習資源和方法,3)動手實踐和復習鞏固,可以在這段時間內逐步掌握Python的基本知識和高級功能。

Python在Web開發中的關鍵應用包括使用Django和Flask框架、API開發、數據分析與可視化、機器學習與AI、以及性能優化。 1.Django和Flask框架:Django適合快速開發複雜應用,Flask適用於小型或高度自定義項目。 2.API開發:使用Flask或DjangoRESTFramework構建RESTfulAPI。 3.數據分析與可視化:利用Python處理數據並通過Web界面展示。 4.機器學習與AI:Python用於構建智能Web應用。 5.性能優化:通過異步編程、緩存和代碼優

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。