Обработка изображений без загрузки с помощью Scrapy Spiders - PullRequest
2 голосов
/ 28 апреля 2019

Я пытаюсь использовать Scrapy Spider для решения проблемы (вопрос программирования от HackThisSite):

(1) Я должен войти на сайт, указав имя пользователя и пароль (уже сделано)

(2) После этого мне нужно получить доступ к изображению с заданным URL-адресом (изображение доступно только зарегистрированным пользователям)

(3) Затем, без сохранения изображения вжесткий диск, я должен прочитать его информацию в виде буфера

(4) И результат функции заполнит форму и отправит данные на сервер сайта (я уже знаю, как это сделатьшаг)

Итак, я могу вернуться к вопросу: можно ли (используя паука) прочитать изображение, доступное только зарегистрированным пользователям, и обработать его в коде паука?

Я пытался исследовать различные методы, использование конвейеров элементов не очень хороший подход (я не хочу загружать файл).

Код, который у меня уже есть:

class ProgrammingQuestion2(Spider):

    name = 'p2'
    start_urls = ['https://www.hackthissite.org/']

    def parse(self, response):

        formdata_hts = {'username': <MY_USER_NAME>,
                'password': <MY_PASSWORD>,
                'btn_submit': 'Login'}

        return FormRequest.from_response(response,
                formdata=formdata_hts, callback=self.redirect_to_page)

    def redirect_to_page(self, response):

        yield Request(url='https://www.hackthissite.org/missions/prog/2/',
                callback=self.solve_question_2)

    def solve_question_2(self, response):

        open_in_browser(response)
        img_url = 'https://www.hackthissite.org/missions/prog/2/PNG'
        # What can I do here?

Я рассчитываю решить эту проблему с помощью функций Scrapy, в противном случаеТо есть необходимо будет снова зайти на сайт (отправив данные формы).

1 Ответ

1 голос
/ 29 апреля 2019

Вы можете сделать запрос на удаление для сканирования изображения, а затем перезвонить на другую конечную точку:

def parse_page(self, response):
    img_url = 'https://www.hackthissite.org/missions/prog/2/PNG'
    yield Request(img_url, callback=self.parse_image)

def parse_image(self, response):
    image_bytes = response.body
    form_data = form_from_image(image_bytes)
    # make form request
...