Очистка изображений от unsplash

#python #python-requests

#python #python-запросы

Вопрос:

Я просмотрел учебник, который позволяет мне очищать изображения, и вот код до сих пор

 import requests
import os

class Unsplash:
    def __init__(self,search_term,per_page=20,quality="thumb"):
        self.search_term = search_term
        self.per_page = per_page
        #self.page = 0
        self.quality = quality
        #self.headers = {"Accept": "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.5", "Host": "unsplash.com", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0"}
        self.headers ={"Accept": "*/*", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.5", "Connection": "keep-alive", "Host": "unsplash.com", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:81.0) Gecko/20100101 Firefox/81.0"}
    

    def set_url(self):
        #return f"https://unsplash.com/napi/search/photos?query={self.search_term}amp;xp=amp;per_page={self.per_page}amp;page={self.page}"
        #https://unsplash.com/napi/search?query={self.search_term}amp;xp=feedback-loop-v2:controlamp;per_page={self.per_page}
        return f"https://unsplash.com/napi/search?query={self.search_term}amp;per_page={self.per_page}"

    def make_request(self):
        url = self.set_url()
        return requests.request("GET",url,headers=self.headers)

    def get_data(self):
        self.data = self.make_request().json()

    def save_path(self,name):
        download_dir = "unsplash"
        if not os.path.exists(download_dir):
            os.mkdir(download_dir)
        return f"{os.path.join(os.path.realpath(os.getcwd()),download_dir,name)}.jpg"

    def download(self,url,name):
        filepath = self.save_path(name)
        with open(filepath,"wb") as f:
            f.write(requests.request("GET",url,headers=self.headers).content)

    def Scraper(self,pages):
        for page in range(0,pages 1):
            self.make_request()
            self.get_data()
            for item in self.data['photos']['results']:
                name = item['id']
                url = item['urls'][self.quality]
                print(url)
                self.download(url,name)
            #self.pages  = 1

if __name__ == "__main__":
    scraper = Unsplash("baby")
    scraper.Scraper(1)
  

Код работает без ошибок, папка создана, и в ней загружены фотографии, но при попытке открыть изображения я не увидел никакого содержимого. Я вставил строку для печати URL-адреса, чтобы убедиться, что я на правильном пути, и я обнаружил, что URL-адрес правильный и правильно отображает фотографию в браузере.
Как это можно исправить?

Когда я удалил части ‘self.headers’, он работает хорошо. Но, как видно, заголовки одобрены для ограничения блоков с веб-сайта. Как я могу правильно сконструировать заголовки?

Комментарии:

1. checkupdown.com/status/E410.html это был код возврата, когда вы выполняли запрос, используя свой self.headers

Ответ №1:

Удалите "Host": "unsplash.com" из вашего заголовка то, что вызывает проблему, оставшихся значений достаточно на базовом уровне для подделки соединений

Комментарии:

1. Большое спасибо. Можете ли вы подсказать мне, как создать лучшие заголовки?

2. Еще один момент. Как я могу получить больше, чем страницу? Я попытался изменить 1 в этой строке scrapper.Scrapper(1) на 2, но, похоже, он загружает одни и те же изображения дважды.

3. f"https://unsplash.com/napi/search?query={self.search_term}amp;per_page={self.per_page}" возвращает не более 30 результатов даже для такого значения, как 100 , что вы подразумеваете под страницей здесь?

4. Я имею в виду, что на каждой странице не более 20 или 30 изображений. Как я могу получить больше результатов?

5. извините, я не уверен, unsplash.com/documentation#search-photos может помочь, если вы еще не знаете об этом, что касается построения заголовков, я не увлекаюсь веб-очисткой, не хочу давать неправильные советы