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

python爬蟲(chóng)入門(mén)教程--利用requests構(gòu)建知乎API(三)

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

前言

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

思路分析

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

打開(kāi) Chrome 瀏覽器,隨便找一個(gè)用戶(hù),點(diǎn)擊發(fā)送私信,追蹤一下私信的網(wǎng)絡(luò)請(qǐng)求過(guò)程。

先看下請(qǐng)求頭信息

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

再來(lái)看看請(qǐng)求的URL和請(qǐng)求體

請(qǐng)求URL是 https://www.zhihu.com/api/v4/messages ,請(qǐng)求方法是 POST,請(qǐng)求體

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

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

那么現(xiàn)在問(wèn)題來(lái)了,如何通過(guò)用戶(hù)主頁(yè)的URL找到用戶(hù)的 id 呢?為了完整的模擬私信的整個(gè)流程,我特地注冊(cè)了一個(gè)知乎小號(hào)。

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

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

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

接口的返回?cái)?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
 ...
}

我們可以很清楚的看到有個(gè)id的字段,跟我們之前猜測(cè)的一樣,私信里面的 receiver_hash 字段就是用戶(hù)的id。

代碼實(shí)現(xiàn)

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

用戶(hù)信息

為了得到私信接口需要的 receiver_hash 字典,我們先要獲取用戶(hù)信息,該信息里面含有用于的id值。

@need_login
def user(self, url_token):
 """
 獲取用戶(hù)信息,
 :param url_token:
 url_token 是用戶(hù)主頁(yè)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):
 """
 給指定的用戶(hù)發(fā)私信
 :param user_id: 用戶(hù)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

上面兩個(gè)方法放在一個(gè)叫Zhihu的類(lèi)里面,我只列出了關(guān)鍵代碼,涉及到的 @need_login 是一個(gè)用戶(hù)認(rèn)證的裝飾器,表示該方法需要登錄后才能操作。細(xì)心的你可能發(fā)現(xiàn),每個(gè)請(qǐng)求中我并沒(méi)有顯示地指定 Header 字段,那時(shí)因?yàn)槲野阉旁?__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, "你好,這是來(lái)自Python之禪的問(wèn)候")

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

最后,我們可以按照類(lèi)似的思路把關(guān)注用戶(hù),點(diǎn)贊等功能實(shí)現(xiàn)了。

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

    在Python中處理日期和時(shí)間的基本知識(shí)點(diǎn)整理匯總

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

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

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

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

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

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

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

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

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

    在pycharm中文件取消用 pytest模式打開(kāi)的操作

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

    python下對(duì)hsv顏色空間進(jìn)行量化操作

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

最新評(píng)論