最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

在爬蟲系列文章 優(yōu)雅的HTTP庫(kù)requests 中介紹了 requests 的使用方式,這一次我們用 requests 構(gòu)建一個(gè)知乎 API,功能包括:私信發(fā)送、文章點(diǎn)贊、用戶關(guān)注等,因?yàn)槿魏紊婕坝脩舨僮鞯墓δ芏夹枰卿浐蟛挪僮?,所以在閱讀這篇文章前建議先了解Python模擬知乎登錄 。現(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ā)送私信了。

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

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

請(qǐng)求頭 Header 中有 cookies 登錄信息,此外還有一個(gè) authorization 字段,該字段是用于用戶認(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)該猜得出這是類似于用戶 id 的字段。

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

如果你手頭沒有多余的手機(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的后面部分,這部分我們稱之為 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 字段就是用戶的id。

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

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

用戶信息

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

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

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

最后,我們可以按照類似的思路把關(guān)注用戶,點(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)文章

  • 聊聊基于pytorch實(shí)現(xiàn)Resnet對(duì)本地?cái)?shù)據(jù)集的訓(xùn)練問(wèn)題

    聊聊基于pytorch實(shí)現(xiàn)Resnet對(duì)本地?cái)?shù)據(jù)集的訓(xùn)練問(wèn)題

    本文項(xiàng)目是使用Resnet模型來(lái)識(shí)別螞蟻和蜜蜂,其一共有三百九十六張的數(shù)據(jù),訓(xùn)練集只有兩百多張(數(shù)據(jù)集很?。?,運(yùn)行十輪后,分別對(duì)訓(xùn)練集和測(cè)試集在每一輪的準(zhǔn)確率,對(duì)pytorch實(shí)現(xiàn)Resnet本地?cái)?shù)據(jù)集的訓(xùn)練感興趣的朋友一起看看吧
    2022-03-03
  • Pytest如何使用skip跳過(guò)執(zhí)行測(cè)試

    Pytest如何使用skip跳過(guò)執(zhí)行測(cè)試

    這篇文章主要介紹了Pytest如何使用skip跳過(guò)執(zhí)行測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 基于Python的接口自動(dòng)化讀寫excel文件的方法

    基于Python的接口自動(dòng)化讀寫excel文件的方法

    這篇文章主要介紹了基于Python的接口自動(dòng)化讀寫excel文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Python爬蟲庫(kù)urllib的使用教程詳解

    Python爬蟲庫(kù)urllib的使用教程詳解

    Python?給人的印象是抓取網(wǎng)頁(yè)非常方便,提供這種生產(chǎn)力的,主要依靠的就是?urllib、requests這兩個(gè)模塊。本文主要給大家介紹一下urllib的使用,感興趣的可以了解一下
    2022-11-11
  • 用Python一鍵搭建Http服務(wù)器的方法

    用Python一鍵搭建Http服務(wù)器的方法

    今天小編就為大家分享一篇用Python一鍵搭建Http服務(wù)器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python實(shí)現(xiàn)批量移動(dòng)文件

    python實(shí)現(xiàn)批量移動(dòng)文件

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量移動(dòng)文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • python return實(shí)現(xiàn)匯率轉(zhuǎn)換器教程示例

    python return實(shí)現(xiàn)匯率轉(zhuǎn)換器教程示例

    這篇文章主要為大家介紹了python return實(shí)現(xiàn)匯率轉(zhuǎn)換器教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python字符串模糊匹配工具TheFuzz的用法詳解

    Python字符串模糊匹配工具TheFuzz的用法詳解

    在處理文本數(shù)據(jù)時(shí),常常需要進(jìn)行模糊字符串匹配來(lái)找到相似的字符串,Python的TheFuzz庫(kù)提供了強(qiáng)大的方法用于解決這類問(wèn)題,本文將深入介紹TheFuzz庫(kù),探討其基本概念、常用方法和示例代碼,需要的朋友可以參考下
    2023-12-12
  • Python 結(jié)構(gòu)化字符串中提取數(shù)據(jù)詳情

    Python 結(jié)構(gòu)化字符串中提取數(shù)據(jù)詳情

    這篇文章主要介紹了Python 結(jié)構(gòu)化字符串中提取數(shù)據(jù)詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 詳解Python中的文件操作

    詳解Python中的文件操作

    在日常生活中,文件操作主要包括打開、關(guān)閉、讀、寫等操作,這篇文章主要為大家詳細(xì)介紹了Python中這些文件操作的實(shí)現(xiàn),需要的可以了解下
    2023-07-07

最新評(píng)論

固阳县| 曲周县| 柘荣县| 华池县| 谢通门县| 青浦区| 成武县| 二连浩特市| 化德县| 册亨县| 广德县| 鹿泉市| 新建县| 株洲县| 凤城市| 南充市| 沂源县| 宁海县| 蚌埠市| 沐川县| 乐业县| 绥中县| 和顺县| 屯昌县| 建水县| 云林县| 曲周县| 文安县| 高平市| 武川县| 沁源县| 麟游县| 台中县| 融水| 宾阳县| 抚州市| 苏尼特左旗| 桑植县| 泉州市| 武汉市| 伊吾县|