最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

自從接觸python以后就想著爬pixiv,之前因為梯子有點問題就一直擱置,最近換了個梯子就迫不及待試了下。

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

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

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

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

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

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

看到下圖紅圈里面:

 那就可以直接正則爬取:

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()

實例化一個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é)點,然后正則爬我們想要的網(wǎng)址:

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

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

這樣的,直接把這個網(wǎng)址復(fù)制網(wǎng)頁欄訪問會顯示403,因為pixiv限制了必須從pixiv網(wǎng)頁點進這個網(wǎng)址,所以我們首先必須headers構(gòu)建refer-to,然后通過排行榜提取到信息后還需要自己手動構(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

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

下載的具體函數(shù),我們對每一個網(wǎng)址的后續(xù)部分提取出來作名字,隨機睡眠1到4秒防止pixiv認出我們是爬蟲把我們ip給封了,之后就是對網(wǎng)址進行訪問下載,這里如果訪問返回的狀態(tài)碼是404說明它其實是個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

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

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

總結(jié)

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

相關(guān)文章

  • Python 中類的構(gòu)造方法 __New__的妙用

    Python 中類的構(gòu)造方法 __New__的妙用

    這篇文章主要介紹了Python 中類的構(gòu)造方法 New的妙用,Python 的類中,所有以雙下劃線__包起來的方法,叫魔術(shù)方法,魔術(shù)方法在類或?qū)ο蟮哪承┦录l(fā)出后可以自動執(zhí)行,讓類具有神奇的魔力。下面就來學(xué)習(xí)文章的詳細內(nèi)容把
    2021-10-10
  • python實現(xiàn)連連看輔助(圖像識別)

    python實現(xiàn)連連看輔助(圖像識別)

    這篇文章主要為大家詳細介紹了python實現(xiàn)連連看輔助程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python 從list中隨機取值的方法

    python 從list中隨機取值的方法

    這篇文章主要介紹了python 從list中隨機取值的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 使用Python實現(xiàn)批量修改文件的修改日期功能

    使用Python實現(xiàn)批量修改文件的修改日期功能

    在日常的文件管理中,您可能需要批量修改文件的修改日期,比如,您可能希望將某個文件夾中的所有文件的修改日期隨機設(shè)置為6到8月份之間的日期,這在數(shù)據(jù)整理中可能非常有用,本文將詳細介紹如何使用Python實現(xiàn)這一功能,需要的朋友可以參考下
    2024-10-10
  • 實例詳解Python模塊decimal

    實例詳解Python模塊decimal

    這篇文章主要介紹了Python模塊decimal ,Python提供了decimal模塊用于十進制數(shù)學(xué)計算,它具有以下特點在文中給大家詳細介紹,需要的朋友可以參考下
    2019-06-06
  • 全面理解python命名空間字典

    全面理解python命名空間字典

    本文主要介紹了全面理解python命名空間字典,python的命名空間由字典實現(xiàn),屬性為鍵,對象為值,通過屬性找到對象,下面就來具體了解一下,感興趣的可以了解一下
    2023-12-12
  • python接口自動化之正則用例參數(shù)化的示例詳解

    python接口自動化之正則用例參數(shù)化的示例詳解

    這篇文章主要介紹了python接口自動化之正則用例參數(shù)化,它是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Python?數(shù)據(jù)類型中的字符串和數(shù)字

    Python?數(shù)據(jù)類型中的字符串和數(shù)字

    這篇文章主要介紹了Python?數(shù)據(jù)類型中的字符串和數(shù)字,Python3中有六個標(biāo)準(zhǔn)的數(shù)據(jù)類型,Number、String、List、Tuple、Set、Dictionary,加先來我們就來看看這幾種數(shù)據(jù)類型的具體相關(guān)介紹,需要的小伙伴可以參考一下
    2022-02-02
  • 《Python學(xué)習(xí)手冊》學(xué)習(xí)總結(jié)

    《Python學(xué)習(xí)手冊》學(xué)習(xí)總結(jié)

    本篇文章是讀者朋友在學(xué)習(xí)了《Python學(xué)習(xí)手冊》這本書以后,總結(jié)出的學(xué)習(xí)心得,值得大家參考學(xué)習(xí)。
    2018-01-01
  • Python實現(xiàn)粒子群算法詳解

    Python實現(xiàn)粒子群算法詳解

    這篇文章主要介紹了Python實現(xiàn)粒子群算法詳解,粒子群算法,縮寫為PSO(Particle Swarm Optimization),是一種非線性尋優(yōu)算法,其特點是實現(xiàn)簡單、收斂速度快,對多元函數(shù)的局部最優(yōu)有較好的克服能力,需要的朋友可以參考下
    2023-07-07

最新評論

叶城县| 平果县| 隆昌县| 和政县| 呼玛县| 偏关县| 杨浦区| 阜阳市| 义马市| 莒南县| 西平县| 南宁市| 岑巩县| 犍为县| 丽水市| 鄂托克前旗| 衡东县| 揭阳市| 梁河县| 盐边县| 阿鲁科尔沁旗| 潢川县| 右玉县| 科尔| 香港 | 招远市| 绥中县| 阿拉善盟| 连山| 锦屏县| 石林| 拉萨市| 安新县| 灵山县| 肇东市| 海丰县| 静乐县| 陈巴尔虎旗| 长沙市| 荃湾区| 普陀区|