一個基於Scrapy框架的pixiv爬蟲


 

 源碼 https://github.com/vicety/Pixiv-Crawler,功能什么的都在這里介紹了

 

說幾個重要的部分吧

登錄部分

困擾我最久的部分,網上找的其他pixiv爬蟲的登錄方式大多已經不再適用或者根本就沒打算登錄……

 

首先,登錄時顯然要提交FormData,一開始我請求的是 https://accounts.pixiv.net/login?lang=zh 這個頁面

這個postkey可以發現和網頁代碼中的這個部分(下圖)中是一樣的,但是用這個postKey是登錄不上去的,結果見下圖

 

登錄可以成功(收到異常登錄郵件),但無論你訪問什么頁面,它都會無限重定向回這個頁面,一開始以為是header填得不完整,可是怎么改都不對

后來發現request請求 http://www.pixiv.net 得到的頁面中也有一個postKey(不太明白上一個postKey的含義,難道是特意騙我們一下……)

 改用這個,成功登錄,剩下應該不是什么問題了

 日榜部分

對於日榜的獲取(雖然還沒有寫進去)也值得提一下,日榜的展現是下拉到底端自動獲取下一頁式的,分析網絡請求,發現這一條的鏈接應該指向的就是下一頁,並且去除后面的&tt=96a6bd8c731d3a46a9388f1e8cd90edf也是一樣可以訪問的

我們進入鏈接,發現是一個json文件,對於我們來說其實更加易於處理

另外說一下,這里推薦Chrome瀏覽器的JSONView插件,自動解析JSON成方便看的模式,火狐似乎自帶這個功能

import json 

js = json.loads(response.text)

url = js["content"]["0"]["url”]

可以使用類似這樣的代碼方便地讀取json文件

另外注意load和loads函數的區別,loads用於處理字符串而load用於處理文件,對於將文件或是字符串轉為json則有dump和dumps函數,就像下面這個例子

import json
data = {
    'a': '123',
    'b': True,
    'c': None,
    'd': 456,
    }
with open("test.json", 'w') as f:
    json.dump(data, f)

# test.json 內容
# {"a": "123", "b": true, "c": null, "d": 456}

    

 

 

搜索部分

在完成按tag搜索的部分時發現,圖片div的class都是這種奇怪的格式,盡管在我的電腦上搜索了其他幾個tag這些class的名字都是一樣的,但是看這種class的名字就有種莫名的不安啊……可能在換個環境class也是會動態變化的

 另外發現網頁中的這個部分data-items的結構就是json,於是剩下的部分又變得方便很多了

 

圖片獲取

 在pipeline中獲取圖片時header中一定要記得帶referer,否則會觸發p站的防盜鏈機制,返回403

 

 

重要的部分差不多就這些,其他按scrapy的套路走就行

 

最后,本來想做個GUI的,嘗試用pyqt5,發現分離GUI線程和爬蟲線程好像挺難解決的,兩個線程間用signal通信也很困難,畢竟臨時學的qypt,解決不了也正常,於是放棄做GUI的打算……

渣代碼,輕噴,歡迎交流指教

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM