欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬蟲實(shí)戰(zhàn)項(xiàng)目之爬取pixiv圖片

 更新時(shí)間:2022年07月07日 10:43:40   作者:EastMage  
最近決定寫個(gè)P站的爬蟲,實(shí)際操作起來確實(shí)遇到了些新問題,通過解決也有所收獲,下面這篇文章主要給大家介紹了關(guān)于python爬蟲實(shí)戰(zhàn)項(xiàng)目之爬取pixiv圖片的相關(guān)資料,需要的朋友可以參考下

自從接觸python以后就想著爬pixiv,之前因?yàn)樘葑佑悬c(diǎn)問題就一直擱置,最近換了個(gè)梯子就迫不及待試了下。

爬蟲無非request獲取html頁面然后用正則表達(dá)式或者beautifulsoup之類現(xiàn)成工具截取我們想要的頁面,pixiv也不例外。

首先我們來實(shí)現(xiàn)模擬登陸,雖然大多數(shù)情況不需要我們實(shí)現(xiàn)模擬登錄,但如果你是會(huì)員之類的,登錄和不登錄網(wǎng)頁就有區(qū)別。思路是登錄時(shí)抓包抓到post請求,看pixiv構(gòu)建的post的數(shù)據(jù)表格是什么格式,我們根據(jù)這個(gè)格式構(gòu)建form,然后調(diào)用post方法去請求,再保存到session中,之后訪問相關(guān)頁面用session替代requests即可。

可以看到pixiv登錄的網(wǎng)址如下,直接復(fù)制:

 抓包找到提交數(shù)據(jù)的請求:

可以看到表單數(shù)據(jù)主要是這幾個(gè),經(jīng)過幾次嘗試,我們在模擬的時(shí)候只需要構(gòu)建password、pixiv_id、post_key再加上一個(gè)return_to(第二張)即可。pixiv_id就是我們的賬號,password是密碼,return_to照著填就行,但這個(gè)post_key卻是隨機(jī)的。

但我們也有辦法,它是我們每次訪問登錄頁面時(shí)動(dòng)態(tài)生成的,這就好辦了,再登錄前先爬取一次登錄前的頁面,找到postkey。

看到下圖紅圈里面:

 那就可以直接正則爬?。?/p>

def get_postkey():
    login_url='https://accounts.pixiv.net/login?return_to=https%3A%2F%2Fwww.pixiv.net%2F&lang=zh&source=pc&view_type=page'
    response=requests.get(url=login_url,headers=headers,verify=False)
    html=response.text
    # print(html)
    postkey=re.findall('"pixivAccount.postKey":"(.*?)","pixivAccount.recaptchaEnterpriseCheckboxSiteKey"',html)
    return postkey[0]

 然后我們就可以構(gòu)建數(shù)據(jù)包:

pixiv_id="賬號" # 你的pixiv賬號
password='xxxxx' # 你的pixiv密碼
return_to='https://www.pixiv.net/'
post_key=get_postkey()

實(shí)例化一個(gè)session對象,然后post提交就能完成模擬登陸: 

session=requests.Session()
 
form_data={
    'pixiv_id':pixiv_id,
    'password':password,
    'return_to':return_to,
    'post_key':post_key
}
login_url1='https://accounts.pixiv.net/login?return_to=https%3A%2F%2Fwww.pixiv.net%2F&lang=zh&source=pc&view_type=page'
res=session.post(url=login_url1,headers=headers,data=form_data)
# 至此模擬登錄成功

到此模擬登錄就成功了,接下來就是爬我們想要的圖片,以爬排行榜為例:

打開排行榜頁面,鼠標(biāo)懸停圖片,右鍵檢查,可以找到對應(yīng)的代碼位置:

找到每張圖片的相似結(jié)構(gòu),我們可以用BeautifulSoup 找到節(jié)點(diǎn),然后正則爬我們想要的網(wǎng)址:

先找到包含每張圖片各種信息的節(jié)點(diǎn),通過類名查找,然后對于每一個(gè)節(jié)點(diǎn)進(jìn)行正則提取,提取出對應(yīng)圖片的下載鏈接,不過需要特別注意的是,pixiv直接顯示的圖片源是騙你的,真正的圖片鏈接的形式應(yīng)該是:

https://i.pximg.net/img-original/img/xxxx/xx/xx/xx/xx/xx/xxxxxxxx_p0.png

這樣的,直接把這個(gè)網(wǎng)址復(fù)制網(wǎng)頁欄訪問會(huì)顯示403,因?yàn)閜ixiv限制了必須從pixiv網(wǎng)頁點(diǎn)進(jìn)這個(gè)網(wǎng)址,所以我們首先必須headers構(gòu)建refer-to,然后通過排行榜提取到信息后還需要自己手動(dòng)構(gòu)建正確的網(wǎng)址:

headers = {'Referer': 'https://www.pixiv.net/',
       
           }
def get_accurate_url(url):
    urll='https://i.pximg.net/img-original/img/' + str(url) + "_p0.jpg"
    return urll

 這里的代碼偷了個(gè)懶,全部當(dāng)作jpg來處理,下載的時(shí)候再處理png的情況

下載的具體函數(shù),我們對每一個(gè)網(wǎng)址的后續(xù)部分提取出來作名字,隨機(jī)睡眠1到4秒防止pixiv認(rèn)出我們是爬蟲把我們ip給封了,之后就是對網(wǎng)址進(jìn)行訪問下載,這里如果訪問返回的狀態(tài)碼是404說明它其實(shí)是個(gè)png格式的圖片,所以對png格式的文件重新構(gòu)建正確的網(wǎng)址即可:

def download(list,filename):
    i=1
    for url in list:
        pic_name=re.findall("https://i.pximg.net/img-original/img/(.*?)_p0.jpg",str(url))
        pic_name1=str(pic_name[0]).replace("/",".")
        r = random.randint(1, 4)
        time.sleep(r)
        response=requests.get(url=url,headers=headers,verify=False)
        if(response.status_code==404):
            the_url='https://i.pximg.net/img-original/img/' + str(pic_name[0]) + "_p0.png"
            response = requests.get(url=the_url, headers=headers, verify=False)
            with open(path + filename + '/' + str(pic_name1) + '.png', 'wb') as f:
                f.write(response.content)
                print("第" + str(i) + "張圖片已下載成功??!")
        else:
            with open(path + filename + '/' + str(pic_name1) + '.jpg', 'wb') as f:
                f.write(response.content)
                print("第" + str(i) + "張圖片已下載成功??!")
        i+=1

最后就是成功下載排行榜的圖片:

另外我在爬的時(shí)候發(fā)現(xiàn)pixiv很多網(wǎng)頁獲取時(shí)會(huì)隱藏body部分的內(nèi)容,包括但不限于各個(gè)tag的網(wǎng)頁和單個(gè)id圖片的網(wǎng)頁,一開始以為是沒有登錄的原因,但是實(shí)現(xiàn)登錄后發(fā)現(xiàn)依然如此,推測可能是body部分內(nèi)容是子網(wǎng)頁或者javsscript生成之類的,反正前端有一萬種方法達(dá)成這個(gè)目的,這個(gè)之后再研究怎么爬。

總結(jié)

到此這篇關(guān)于python爬蟲實(shí)戰(zhàn)項(xiàng)目之爬取pixiv圖片的文章就介紹到這了,更多相關(guān)python爬取pixiv圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python一鍵生成所有依賴包清單方法小結(jié)

    Python一鍵生成所有依賴包清單方法小結(jié)

    本文主要介紹了Python一鍵生成所有依賴包清單方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • python實(shí)現(xiàn)的生成word文檔功能示例

    python實(shí)現(xiàn)的生成word文檔功能示例

    這篇文章主要介紹了python實(shí)現(xiàn)的生成word文檔功能,涉及Python數(shù)據(jù)查詢、遍歷及word文檔生成相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • Python使用lambda表達(dá)式對字典排序操作示例

    Python使用lambda表達(dá)式對字典排序操作示例

    這篇文章主要介紹了Python使用lambda表達(dá)式對字典排序操作,結(jié)合實(shí)例形式分析了lambda表達(dá)式實(shí)現(xiàn)字典按鍵排序、按值排序、多條件排序相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • Python數(shù)據(jù)可視化探索實(shí)例分享

    Python數(shù)據(jù)可視化探索實(shí)例分享

    這篇文章主要介紹了Python數(shù)據(jù)可視化探索實(shí)例分享,數(shù)據(jù)可視化是指用圖形或表格的方式來呈現(xiàn)數(shù)據(jù),關(guān)于更多相關(guān)介紹需要的小伙伴可以參考下面文章的具體內(nèi)容
    2022-05-05
  • 使用python搭建代理IP池實(shí)現(xiàn)接口設(shè)置與整體調(diào)度

    使用python搭建代理IP池實(shí)現(xiàn)接口設(shè)置與整體調(diào)度

    在網(wǎng)絡(luò)爬蟲中,代理IP池是一個(gè)非常重要的組件,由于許多網(wǎng)站對單個(gè)IP的請求有限制,因此,我們需要一個(gè)代理IP池,在本文中,我們將使用Python來構(gòu)建一個(gè)代理IP池,然后,我們將使用這個(gè)代理IP池來訪問我們需要的數(shù)據(jù),文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • Jupyter notebook 遠(yuǎn)程配置及SSL加密教程

    Jupyter notebook 遠(yuǎn)程配置及SSL加密教程

    這篇文章主要介紹了Jupyter notebook 遠(yuǎn)程配置及SSL加密教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python深度學(xué)習(xí)實(shí)戰(zhàn)PyQt5基本控件使用解析

    Python深度學(xué)習(xí)實(shí)戰(zhàn)PyQt5基本控件使用解析

    PyQt5 提供了豐富的輸入輸出控件。本文介紹通過 QtDesigner 工具欄創(chuàng)建常用的基本控件,包括各種按鈕控件、文本輸入控件和調(diào)節(jié)輸入控件
    2021-10-10
  • python如何實(shí)現(xiàn)圖片轉(zhuǎn)文字

    python如何實(shí)現(xiàn)圖片轉(zhuǎn)文字

    這篇文章主要介紹了python如何實(shí)現(xiàn)圖片轉(zhuǎn)文字問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Pytorch反向傳播中的細(xì)節(jié)-計(jì)算梯度時(shí)的默認(rèn)累加操作

    Pytorch反向傳播中的細(xì)節(jié)-計(jì)算梯度時(shí)的默認(rèn)累加操作

    這篇文章主要介紹了Pytorch反向傳播中的細(xì)節(jié)-計(jì)算梯度時(shí)的默認(rèn)累加操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 詳解Python中神奇的字符串駐留機(jī)制

    詳解Python中神奇的字符串駐留機(jī)制

    字符串駐留機(jī)制是Python針對字符串對象采取的一種內(nèi)存優(yōu)化技術(shù)。其目標(biāo)是減少內(nèi)存使用并提高程序的性能。這篇文章主要介紹了字符串駐留機(jī)制的簡單應(yīng)用,需要的可以參考一下
    2023-04-04

最新評論