python小爬蟲—抓取pixabay網站的圖片資源

這是一個免費下載圖片的網站https://pixabay.com


這裏寫圖片描述

這個網站有很多免費下載的圖片我比較喜歡,一張一張下載我也懶得戳鼠標,所以我先搜索到我喜歡的圖片分類,然後發現在doc裏面的html文件找不到圖片鏈接,於是判斷圖片是通過ajax加載上的,又去找xhr,終於在裏面發現了所有的requests url跟正常網站的不一樣

這裏寫圖片描述

分析鏈接https://pixabay.com/zh/photos/hp=&image_type=&cat=&min_width=&min_height=&q=%E8%87%AA%E7%84%B6%E9%A3%8E%E5%85%89&order=popular,?後面的是我搜索的關鍵詞,於是我就拿着這個當請求url試了一下,驚奇的發現這竟然就是圖片鏈接所在的響應界面,這下被我找到了,於是我就把所有img標籤的src拿出來正當我暗自慶幸拿到圖片鏈接的時候,往下瞄了一眼發現不大對,只有前幾個正常,後面全是假的數據!!!

這裏寫圖片描述

我又跳過前面幾條數據,從後面發現原來真正的數據不再src裏,而是在data-lazy和data-lazy-srcset裏面
這裏寫圖片描述

於是我就修改了一下總算找到了真正的數據,把所有鏈接提取出來,然後把圖片保存到自己想存的地方就可以了,大功告成
這裏寫圖片描述

貼代碼

import requests
import json
import os
from bs4 import BeautifulSoup
import http.cookiejar as cookielib  



class pic_spyder(object):
    

    def __init__(self,url,header,data,proxies):
        self.url=url
        self.headers=header
        self.data=data
        self.session=requests.session()
        self.proxies=proxies
   
    def connect_get(self):
        self.session.cookies=cookielib.LWPCookieJar(filename='pic_cookies')
        if not os.path.exists('pic_cookies'):
            self.r=self.session.get(self.url,headers=self.header,params=self.data)
            self.session.cookies.save(ignore_discard=True,ignore_expires=True)
        else:
            self.session.cookies.load(ignore_discard=True)
            print('cookies login')
            if(self.data == None):
               self.r=self.session.get(self.url,headers=self.headers)
            else:
               self.r=self.session.get(self.url,headers=self.headers,params=self.data)   
               
        return self.r   


    def get_data(self,r):
        self.soup=BeautifulSoup(r,'lxml')
        return self.soup


url='https://pixabay.com/zh/photos/?hp=&image_type=&cat=&min_width=&min_height=&q=%E8%87%AA%E7%84%B6%E9%A3%8E%E5%85%89&order=popular'
header={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'
}
proxies = { 
    "http": "http://121.232.144.186:9000",
    "https": "http://121.232.144.186:9000"
    }   
spyder=pic_spyder(url,header,None,proxies)
r=spyder.connect_get()
soup=spyder.get_data(r.text)
list=[d.get('data-lazy') for d in soup.select('img')[6:]]
print(list)

發佈了36 篇原創文章 · 獲贊 14 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章