這是一個免費下載圖片的網站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)