作為今天的一個小練習,爬取了這個網站的一些圖片,這個網站的圖片都是動態加載(往下拉,又會加載出圖片),沒有用requests爬過動態的網站,因為我一直找不出他們的規律,這個網站也是在試了很久之后,network抓包,發現在XHR里邊發現了一個情況,就是下拉的時候,每到一個地方會觸發一個請求,
urls = []
for i in range(10):
url = 'https://unsplash.com/napi/photos?page='+str(i)+'&per_page=12&order_by=latest'#構造url動態的
urls.append(url)
我把它放在了一個列表里邊,然后我再遍歷url列表發起請求,得到json文件,然后通json.loads將json文件轉為字典去取得圖片的id。
ids = []
def getHtml(url):
headers = {
'User-Agent': 'Mozilla/5.0'
}
try:
r = requests.get(url,headers =headers) # , verify=False
r.raise_for_status()
r.encoding = 'utf-8'
return r.text
except:
print('爬取失敗')
return ''
def getId(html): #獲取圖片的id
jd = json.loads(html) #轉為字典
for j in jd:
ids.append(j['id']) #得到圖片的id并放入到列表里邊
def main():
for url in urls:
html = getHtml(url)
getId(html)
在取到圖片的id之后,就可以通過id去構造獲得圖片的url:https://unsplash.com/photos/-iFhGZP_mhk/download
photos/這部分是id/download,那就可以構造出圖片的url了
img_urls = []
for id in ids:
ul = 'https://unsplash.com/photos/'+id+'/download' #構造下載圖片的url
img_urls.append(ul)
構造的部分url
['https://unsplash.com/photos/DaQmfmkA20w/download ', 'https://unsplash.com/photos/_SBsVi4kmkY/download ', 'https://unsplash.com/photos/4uYv2fEZ5PU/download ', 'https://unsplash.com/photos/4JnHWc2tuFE/download ' ]
然后就可以通過構造的url去發起請求下載圖片了,最后保存到imges文件夾下。
完整代碼:
import requests
import json
ids = [] #設置成全局是因為我想存我取到的所有id
i = 0
def getHtml(url):
headers = {
'User-Agent': 'Mozilla/5.0'
}
try:
r = requests.get(url,headers =headers) # , verify=False
r.raise_for_status()
r.encoding = 'utf-8'
return r.text
except:
print('爬取失敗')
return ''
def getId(html):
jd = json.loads(html)
for j in jd:
ids.append(j['id'])
def getImg(url):
global i
for u in url:
r = requests.get(u)#,verify=False,stream=True
f = open('imges/'+ids[i]+'.jpg','ab')
f.write(r.content)
print('保存第{}張圖片成功'.format(i+1))
i += 1
print('全部圖片保存完成,共{}張圖片'.format(i+1))
def main():
urls = []
img_urls = []
for i in range(10):
url = 'https://unsplash.com/napi/photos?page='+str(i)+'&per_page=12&order_by=latest'#構造url動態的
urls.append(url)
for url in urls:
html = getHtml(url)
getId(html)
for id in ids:
ul = 'https://unsplash.com/photos/'+id+'/download' #構造下載圖片的url
img_urls.append(ul)
print(img_urls)
getImg(img_urls)
main()
問題:
1、下載的速度太慢,不知道為什么。
2、保存的圖片有下載失敗的,可能是受網速的影響,直接在瀏覽器訪問也特別慢