小紅書很難爬?最新爬取方法教給你啦~
點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
莫學(xué)武陵人,暫游桃源里。
Python進(jìn)擊者
第184篇原創(chuàng)文章
前言
大家好,我是Kuls。
之前寫的那篇App抓包軟件charles的配置說過,超過30在看,馬上更下一篇。有讀者問我怎么爬App,我手把手教了他(多圖警告)
所以加班加點(diǎn)給大家寫了今天這篇文章。
本文將會(huì)帶著大家完完整整的爬取小紅書的全過程
小紅書
需要做的前提工作就是裝配好mitmproxy
具體的配置過程,我建議大家參照崔大寫的來進(jìn)行安裝
https://zhuanlan.zhihu.com/p/33747453
首先,我們打開之前大家配置好的charles
我們來簡單抓包一下小紅書小程序(注意這里是小程序,不是app)
不選擇app的原因是,小紅書的App有點(diǎn)難度,參照網(wǎng)上的一些思路,還是選擇了小程序
1、通過charles抓包對小程序進(jìn)行分析

我們打開小紅書小程序,隨意搜索一個(gè)關(guān)鍵詞

按照我的路徑,你可以發(fā)現(xiàn)列表中的數(shù)據(jù)已經(jīng)被我們抓到了。
但是你以為這就結(jié)束了?
不不不

通過這次抓包,我們知道了可以通過這個(gè)api接口獲取到數(shù)據(jù)
但是當(dāng)我們把爬蟲都寫好時(shí),我們會(huì)發(fā)現(xiàn)headers里面有兩個(gè)很難處理的參數(shù)
"authorization"和"x-sign"
這兩個(gè)玩意,一直在變化,而且不知道從何獲取。
所以
2、使用mitmproxy來進(jìn)行抓包
其實(shí)通過charles抓包,整體的抓取思路我們已經(jīng)清晰
就是獲取到"authorization"和"x-sign"兩個(gè)參數(shù),然后對url進(jìn)行g(shù)et請求
這里用到的mitmproxy,其實(shí)和charles差不多,都是抓包工具
但是mitmproxy能夠跟Python一起執(zhí)行
這就舒服很多啊
簡單給大家舉例子
?def?request(flow):
?????print(flow.request.headers)
在mitmproxy中提供這樣的方法給我們,我們可以通過request對象截取到request headers中的url、cookies、host、method、port、scheme等屬性
這不正是我們想要的嗎?
我們直接截取"authorization"和"x-sign" 這兩個(gè)參數(shù)
然后往headers里填入
整個(gè)就完成了。
以上是我們整個(gè)的爬取思路,下面給大家講解一下代碼怎么寫
其實(shí)代碼寫起來并不難
首先,我們必須截取到搜索api的流,這樣我們才能夠?qū)ζ溥M(jìn)行獲取信息
if?'https://www.xiaohongshu.com/fe_api/burdock/weixin/v2/search/notes'?in?flow.request.url:
我們通過判斷flow的request里面是否存在搜索api的url
來確定我們需要抓取的請求
authorization=re.findall("authorization',.*?'(.*?)'\)",str(flow.request.headers))[0]
x_sign=re.findall("x-sign',.*?'(.*?)'\)",str(flow.request.headers))[0]
url=flow.request.url
通過上述代碼,我們就能夠把最關(guān)鍵的三個(gè)參數(shù)拿到手了,接下來就是一些普通的解析json了。
最終,我們可以拿到自己想要的數(shù)據(jù)了

如果你想要獲取到單篇數(shù)據(jù),可以拿到文章id后抓取
"https://www.xiaohongshu.com/discovery/item/" + str(id)

這個(gè)頁面headers里需要帶有cookie,你隨意訪問一個(gè)網(wǎng)站都可以拿到cookie,目前看來好像是固定的
最后,可以把數(shù)據(jù)放入csv

總結(jié)
其實(shí)小紅書爬蟲的抓取并不是特別的難,關(guān)鍵在于思路以及使用的方法是什么。
本期的文章就到這里了,如果本期在看超過40,馬上出下一篇干貨!
我們下期見~
-------------------?End?-------------------
往期精彩文章推薦:
一篇文章教會(huì)你使用Django根據(jù)現(xiàn)有數(shù)據(jù)庫反向生成models
手把手教你使用Django如何連接Mysql
一篇文章總結(jié)一下Python庫中關(guān)于時(shí)間的常見操作

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請?jiān)诤笈_回復(fù)【入群】
萬水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
