欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬蟲入門教程--利用requests構(gòu)建知乎API(三)

 更新時間:2017年05月25日 10:15:15   作者:FOOFISH  
這篇文章主要給大家介紹了關(guān)于python爬蟲入門之利用requests構(gòu)建知乎API的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。

前言

在爬蟲系列文章 優(yōu)雅的HTTP庫requests 中介紹了 requests 的使用方式,這一次我們用 requests 構(gòu)建一個知乎 API,功能包括:私信發(fā)送、文章點贊、用戶關(guān)注等,因為任何涉及用戶操作的功能都需要登錄后才操作,所以在閱讀這篇文章前建議先了解Python模擬知乎登錄 ?,F(xiàn)在假設(shè)你已經(jīng)知道如何用 requests 模擬知乎登錄了。

思路分析

發(fā)送私信的過程就是瀏覽器向服務(wù)器發(fā)送一個 HTTP 請求,請求報文包括請求 URL、請求頭 Header、還有請求體 Body,只要把這些信息弄清楚,那么就很容易用 requests 來模擬瀏覽器發(fā)送私信了。

打開 Chrome 瀏覽器,隨便找一個用戶,點擊發(fā)送私信,追蹤一下私信的網(wǎng)絡(luò)請求過程。

先看下請求頭信息

請求頭 Header 中有 cookies 登錄信息,此外還有一個 authorization 字段,該字段是用于用戶認證的,同時這個字段也存在 cookies 中(為了防止 cookie 信息泄露,我打了馬賽克), requests 請求時這些信息都必須攜帶上。

再來看看請求的URL和請求體

請求URL是 https://www.zhihu.com/api/v4/messages ,請求方法是 POST,請求體

{"type":"common","content":"你好,我是pythoner","receiver_hash":"1da75b85900e00adb072e91c56fd9149"}

請求體是一個 json 字符串,type 和 content 很好理解,但 receiver_hash 是什么并不知道,需要進一步確定,不過你應(yīng)該猜得出這是類似于用戶 id 的字段。

那么現(xiàn)在問題來了,如何通過用戶主頁的URL找到用戶的 id 呢?為了完整的模擬私信的整個流程,我特地注冊了一個知乎小號。

如果你手頭沒有多余的手機號,可以用 Google 搜「receive sms online」,網(wǎng)上很多提供免費在線接收短信的手機號碼,我注冊的小號主頁:https://www.zhihu.com/people/xiaoxiaodouzi

先嘗試關(guān)注小號,然后在我關(guān)注的列表中找到該小號,把鼠標(biāo)移到小號的頭像處時,發(fā)現(xiàn)有一個 HTTP 網(wǎng)絡(luò)請求。

請求 url 是 https://www.zhihu.com/api/v4/members/xiaoxiaodouzi ,這個URL的后面部分「xiaoxiaodouzi」對應(yīng)小號主頁URL的后面部分,這部分我們稱之為 url_token。

接口的返回數(shù)據(jù)

{ 
 ...
 "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。

代碼實現(xiàn)

到此我們把私信功能的思路理清楚了,代碼實現(xiàn)就是水到渠成的事情了。

用戶信息

為了得到私信接口需要的 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()

發(fā)送私信

@need_login
def send_message(self, user_id, content):
 """
 給指定的用戶發(fā)私信
 :param user_id: 用戶ID
 :param content: 私信內(nèi)容
 """
 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("私信發(fā)送失敗, %s" % data.get("error").get("message"))
 else:
 self.logger.info("發(fā)送成功")
 return data

上面兩個方法放在一個叫Zhihu的類里面,我只列出了關(guān)鍵代碼,涉及到的 @need_login 是一個用戶認證的裝飾器,表示該方法需要登錄后才能操作。細心的你可能發(fā)現(xiàn),每個請求中我并沒有顯示地指定 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

調(diào)用執(zhí)行

from zhihu import Zhihu

if __name__ == '__main__':
 zhihu = Zhihu()
 profile = zhihu.user("xiaoxiaodouzi")
 _id = profile.get("id")
 zhihu.send_message(_id, "你好,這是來自Python之禪的問候")

執(zhí)行完成后,小號成功收到我發(fā)送的私信。

最后,我們可以按照類似的思路把關(guān)注用戶,點贊等功能實現(xiàn)了。

源碼地址:https://github.com/lzjun567/zhihu-api 

在線下載:http://xiazai.jb51.net/201705/yuanma/zhihu-api(jb51.net).rar

總結(jié)

以上就是關(guān)于這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家學(xué)習(xí)或者使用python能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Python?Pytorch學(xué)習(xí)之圖像檢索實踐

    Python?Pytorch學(xué)習(xí)之圖像檢索實踐

    隨著電子商務(wù)和在線網(wǎng)站的出現(xiàn),圖像檢索在我們的日常生活中的應(yīng)用一直在增加。圖像檢索的基本本質(zhì)是根據(jù)查詢圖像的特征從集合或數(shù)據(jù)庫中查找圖像。本文將利用Pytorch實現(xiàn)圖像檢索,需要的可以參考一下
    2022-04-04
  • 本地部署Python?Flask并搭建web問答應(yīng)用程序框架實現(xiàn)遠程訪問的操作方法

    本地部署Python?Flask并搭建web問答應(yīng)用程序框架實現(xiàn)遠程訪問的操作方法

    Flask是一個Python編寫的Web微框架,使用Python語言快速實現(xiàn)一個網(wǎng)站或Web服務(wù),本期教程我們使用Python Flask搭建一個web問答應(yīng)用程序框架,并結(jié)合cpolar內(nèi)網(wǎng)穿透工具將我們的應(yīng)用程序發(fā)布到公共網(wǎng)絡(luò)上,實現(xiàn)可多人遠程進入到該web應(yīng)用程序訪問,需要的朋友可以參考下
    2023-12-12
  • Python數(shù)據(jù)分析之?Pandas?Dataframe條件篩選遍歷詳情

    Python數(shù)據(jù)分析之?Pandas?Dataframe條件篩選遍歷詳情

    這篇文章主要介紹了Python數(shù)據(jù)分析之?Pandas?Dataframe條件篩選遍歷詳情,查詢Pandas?Dataframe數(shù)據(jù)時,經(jīng)常會篩選出符合條件的數(shù)據(jù),關(guān)于其使用方式,需要的小伙伴可以參考一下下面文章內(nèi)容
    2022-05-05
  • 在Python中處理日期和時間的基本知識點整理匯總

    在Python中處理日期和時間的基本知識點整理匯總

    這篇文章主要介紹了在Python中處理日期和時間的基本知識點整理匯總,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • 基于python的文字轉(zhuǎn)圖片工具示例詳解

    基于python的文字轉(zhuǎn)圖片工具示例詳解

    這篇文章主要介紹了基于python的文字轉(zhuǎn)圖片工具,請求示例是使用?curl?命令請求示例,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • python生成任意頻率正弦波方式

    python生成任意頻率正弦波方式

    今天小編就為大家分享一篇python生成任意頻率正弦波方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python實現(xiàn)庫存商品管理系統(tǒng)

    python實現(xiàn)庫存商品管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)庫存商品管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 基于Python中random.sample()的替代方案

    基于Python中random.sample()的替代方案

    這篇文章主要介紹了基于Python中random.sample()的替代方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 在pycharm中文件取消用 pytest模式打開的操作

    在pycharm中文件取消用 pytest模式打開的操作

    這篇文章主要介紹了在pycharm中文件取消用 pytest模式打開的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • python下對hsv顏色空間進行量化操作

    python下對hsv顏色空間進行量化操作

    這篇文章主要介紹了python下對hsv顏色空間進行量化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評論