(爬)500px網站最受歡迎的照片
(爬)500px網站最受歡迎的照片
目標網址:https://500px.com/popular
分析網頁結構
進入開發者模式後按(1),再按(2),網頁往下拉會發現是動態
加載的形態,下拉的同時在NAME的方框中出現加載的訊息(3),
按(4)發現照片連結全列在其中。這樣就省去解析直接用json就可抓取
圖檔。
回到headers後,看一下目標網址,連結看看是不是json的格式呈現出來
果然如此,那就好辦了。
主要抓取的網址在哪?
因為剛剛觀察到的是圖片加載的網址,那主要承載的網址在哪呢?
在頁面網下拉時觀察它會對應隨之出現的資訊,如下圖:
大紅框裡的就是主要抓取的網址
會用到的庫
import requests
from fake_useragent import UserAgent
from pprint import pprint
requests主要是抓取html網頁
fake_useragent主要是負責生成請求表頭,我們要使它隨機更換表頭,
才不會被封。
pprint就是把雜亂的json印出可以較好看些
我們用這種寫法讓它生成隨機表頭
ua=UserAgent(verify_ssl=False)
for i in range(1,100):
headers={'User-Agent':
ua.random}
那是同一張照片的不同像素,截取時可依自己喜愛更改。
完整程式碼:
import requests
from fake_useragent import UserAgent
from pprint import pprint
url='https://api.500px.com/v1/photos?rpp=50&feature=popular&image_size%5B%5D=1&image_size%5B%5D=2&image_size%5B%5D=32&image_size%5B%5D=31&image_size%5B%5D=33&image_size%5B%5D=34&image_size%5B%5D=35&image_size%5B%5D=36&image_size%5B%5D=2048&image_size%5B%5D=4&image_size%5B%5D=14&sort=&include_states=true&include_licensing=true&formats=jpeg%2Clytro&only=&exclude=&personalized_categories=&page=1&rpp=50'
ua=UserAgent(verify_ssl=False)
for i in range(1,100):
headers={'User-Agent':
ua.random}
num=0
html=requests.get(url, headers=headers).json()
photo=html['photos']
for p in photo:
photos=p['image_url'][5] #[5是照片相素,]
imgurl=requests.get(photos, headers=headers)
with open(r'D:\test\\'+str(num)+'.jpg', 'wb') as imgfiles:
for desk in imgurl.iter_content(10240):
imgfiles.write(desk)
num+=1
留言
張貼留言