2 votes

Traitement des images sans téléchargement à l'aide de Spiders Scrapy

J'essaie d'utiliser un Spider Scrapy pour résoudre un problème (une question de programmation de HackThisSite) :

(1) Je dois me connecter à un site web, en donnant un nom d'utilisateur et un mot de passe (déjà fait).

(2) Ensuite, je dois accéder à une image avec une URL donnée (l'image n'est accessible qu'aux utilisateurs connectés).

(3) Ensuite, sans sauvegarder l'image sur le disque dur, je dois lire ses informations dans une sorte de tampon.

(4) Et le résultat de la fonction va remplir un formulaire et envoyer les données au serveur du site web (je sais déjà comment faire cette étape)

Donc, je peux résumer la question à : serait-il possible (en utilisant un spider) de lire une image accessible uniquement par les utilisateurs connectés et de la traiter dans le code du spider ?

J'ai essayé de rechercher différentes méthodes, l'utilisation des pipelines d'éléments n'est pas une bonne approche (je ne veux pas télécharger le fichier).

Le code que j'ai déjà est le suivant :

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?

Je pense pouvoir résoudre ce problème en utilisant les fonctions Scrapy, sinon il faudrait se reconnecter au site web (en envoyant les données du formulaire).

2voto

Granitosaurus Points 10494

Vous pouvez faire une requête scrapy pour explorer l'image et ensuite faire un appel à un autre point de terminaison :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X