使用環境:
- python3
- scrapy
- win10
爬取思路
(一)關于as、cp的生成與_signature的想法
對于今日頭條的爬蟲,網上搜尋出來的文章大多是基于崔慶才(通過搜尋爬取美女街拍的方案),怎麼說呢,類似這樣的雖說是個巧辦法,但是用到工作中卻是行不通的。在這裡,網上是搜了又搜,谷歌,百度都用上了。在這裡做一下今日頭條爬取文章的幾個方案。
- 一個方案是:破解了as,cp,卻沒能破解_signature:
今日頭條的as、cp破解
用的技術有execjs,一個執行js代碼的架構,但是還是不能很好的把浏覽器環境(比如Node環境)嵌入進去,
- [今日頭條爬蟲之:解析JS得到signature](http://notech.net/886.html)
使用了一個PyV8的js庫,主要的擷取_signature
給出了一段很操蛋的代碼:
def get_signature(self,user_id):
"""
計算_signature
:param user_id: user_id不需要計算,對使用者可見
:return: _signature
"""
req = requests.Session()
# js擷取目的
jsurl = 'https://s3.pstatp.com/toutiao/resource/ntoutiao_web/page/profile/index_8f8a2fb.js'
resp = req.get(jsurl,headers = self.headers)
js = resp.content
effect_js = js.split("Function")
js = 'var navigator = {};\
navigator["userAgent"] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36";\
' + "Function" + effect_js[] +
"Function" + effect_js[] +
";function result(){ return TAC.sign(" + user_id + ");} result();"
# PyV8執行步驟
with PyV8.JSLocker():
self.ctxt.enter() #已在上面初始化過
vl5x = self.ctxt.eval(js)
self.ctxt.leave()
self.LOG.info("聖誕快樂")
return vl5x
PyV8這個庫在win10上死活安裝不上去,後面在centos7環境裝好了,執行這一段代碼,直接報了個記憶體不夠的錯誤好像,直接調用TAC.sign的方法卻少了Node環境(大一點講是浏覽器環境),還是報錯。可能這确實是個方法,不過在簡書上回報的人很少,不知道是我弄不出來,還是他們都弄出來了。
(二)後面索性直接用了自己的方法: 繞過_signature這個參數,直接請求網頁端(wap)的資料資訊。
右鍵檢查,點選到json一欄,選中其中一個url
URL一:
https://www.toutiao.com/pgc/ma/?page_type=1&max_behot_time=1532168614&uid=4377795668&media_id=4377795668&output=json&is_json=1&count=10&from=user_profile_app&version=2&as=A1054BF5B303CEE&cp=5B5353EC0EEE0E1&callback=jsonp5
URL二:
https://www.toutiao.com/pgc/ma/?page_type=1&max_behot_time=1532166905&uid=4377795668&media_id=4377795668&output=json&is_json=1&count=10&from=user_profile_app&version=2&as=A1C5EB457343CF5&cp=5B53839C4FC53E1&callback=jsonp6
as,cp在之前的文章中,我們已經能夠求出來了,現在需要做的就是如何拼接這一串url,
根據上面兩個url的對比,我們隻需要更換掉max_behot_time,和jsonp,
這樣整個清單頁的資料我們就擷取出來了。
接下來解析詳情頁的資料,大概就簡單了許多。
檢視網頁源代碼:
這正是我們想要的資料,使用正則擷取就可以了。
到這裡我們就将今日頭條的資料可以完全爬取出來了。
需要源碼的可以加小密圈:
更多原創部落格請通路:
徐代龍的技術專欄
https://blog.csdn.net/xudailong_blog/article/details/78762262
個人部落格