python爬蟲入門教程

2022-10-03 08:48:08 字數 2688 閱讀 4760

前言

在爬蟲系列文章 優雅的http庫requests 中介紹了 requests 的使用方式,這一次我們用 requests 構建乙個知乎 api,功能包括:私信傳送、文章點讚、使用者關注等,因為任何涉及使用者操作的功能都需要登入後才操作,所以在閱讀這篇文章前建議先了解python模擬知乎登入 。現在假設你已經知道如何用 requests 模擬知乎登入了。

思路分析

傳送私信的過程就是瀏覽器向伺服器傳送乙個 http 請求,請求報文包括請求 url、請求頭 header、還有請求體 body,只要把這些資訊弄清楚,那麼就很容易用 requests 來模擬瀏覽器傳送私信了。

開啟 chrome 瀏覽器,隨便找乙個使用者,點選傳送私信,追蹤一下私信的網路請求過程。

先看下請求頭資訊

請求頭 header 中有 cookies 登入資訊,此外還有乙個 authorization 字段,該字段是用於使用者認證的,同時這個欄位也存在 cookies 中(為了防止 cookie 資訊洩露,我打了馬賽克), requests 請求時這些資訊都必須攜帶上。

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

請求url是 ,請求方法是 post,請求體

請求體是乙個 json 字串,type 和 content 很好理解,但 receiver_hash 是什麼並不知道,需要進一步確定,不過你應該猜得出這是類似於使用者 id 的字段。

那麼現在問題來了,如何通過使用者主頁的url找到使用者的 id 呢?為了完整的模擬私信的整個流程,我特地註冊了乙個知乎小號。

如果你手頭沒有多餘的手機號,可以用 google 搜「receive sms online」,網上很多提供免費**接收簡訊的手機號碼,我註冊的小號主頁:

先嘗試關注小號,然後在我關注的列表中找到該小號,把滑鼠移到小號的頭像處時,發現有乙個 http 網路請求。

請求 url 是 這個url的後面部分「xiaoxiaodouzi」對應小號主頁url的後面部分,這部分我們稱之為 url_token。

介面的返回資料是該使用者的個人公開資訊。

我們可以很清楚的看到有個id的字段,跟我們之前猜測的一樣,私信裡面的 receiver_hash 字段就是使用者的id。

**實現

到此我們把私信功能的思路理清楚了,**實現就是水到渠成的事情了。

使用者資訊

為了得到私信介面需要的 receiver_hash 字典,我們先要獲取使用者資訊,該資訊裡面含有用於的id值。

@need_login

def user(self, url_token):

"""獲取使用者資訊,

:param url_token:

url_token 是使用者主頁url中後面部分

例如:

url_token 是 xiaoxiaodouzi

:return:dict

"""response = self._session.get(url.profile(url_token))

return response

傳送私信

@need_login

def send_message(self, user_id, content):

"""給指定的使用者發私信

:param user_id: 使用者id

:param content: 私信內容

"""data =

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 =

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("i程式設計客棧d")

zhihu.send_message(_id, "你好,這是來自python之禪的問候")

執行完成後,小號成功收到我傳送的私信。

最後,我們可以按照類似的思路把關注使用者,點讚等功能實現了。

原始碼位址: 

****:

總結

python爬蟲入門教程 Python 爬蟲介紹

一 什麼是爬蟲 爬蟲 一段自動抓取網際網路資訊的程式,從網際網路上抓取對於我們有價值的資訊。二 python爬蟲架構 網頁解析器 將乙個網頁字串進行解析,可以按照我們的要求來提取出我們有用的資訊,也可以根據dom樹的解析方式來解析。網頁解析器有正規表示式 直觀,將網頁轉成字串通過模糊匹配的方式來提取...

python爬蟲(1) 入門教程

網頁一般由三部分組成,分別是 html 超文字標記語言 css 層疊樣式表 和 jscript 活動指令碼語言 1 html html 是整個網頁的結構,相當於整個 的框架。帶 符號的都是屬於 html 的標籤,並且標籤都是成對出現的。2 css css 表示樣式,圖 1 中第 13 行 style...

Python爬蟲入門教程,通過爬蟲實戰學會爬蟲。

未完待續 requests簡介 python中原生的一款基於網路請求的模組,功能強大,簡單便捷,效率極高.作用 模擬遊覽器請求。安裝 pip install requests 使用 指定url 發起請求 獲取響應資料 持久化儲存 import requests if name main 指定url ...