Partage
  • Partager sur Facebook
  • Partager sur Twitter

Scraping avec Scrapy

Modifier URL middleware avant d'envoyer la request

    16 janvier 2024 à 22:02:43

    Bonjour,

    Je suis en train de réaliser un programme permettant de scraper des offres d'emplois sur un site. Cependant, j'ai un problème : sur ce même site les liens sont programmés parfois avec des href relatifs parfois absolu (ex : parfois j'ai https://fr.indeed.com => correct, mais d'autres fois : /cmd/jobs => incorrect). Il faut donc vérifier avant l'envoi de chaque requête si cette deniere est correcte. Pour ce faire, j'ai codé une fonction dans les middlewares qui me permet de vérifier cela :

    class IndeedDomainVerificationMiddleware:
    
        def __init__(self, indeed_domain_url):
            self.indeed_domain_url = indeed_domain_url
    
        @classmethod
        def from_crawler(cls, crawler):
            return cls(indeed_domain_url=crawler.settings.get('INDEED_DOMAIN_URL'))
    
        def process_request(self, request, spider):
            if spider.name == 'Indeed':
                print(request.url)
                if self.indeed_domain_url not in request.url:
                    new_url = self.indeed_domain_url + request.url
                    print("New URL: %s" % new_url)
                    return request.replace(url=new_url)
                else:
                    pass
            return None

    Dans middlewares.py

    Dans mon fichier de settings, j'ai :

    SCRAPEOPS_API_KEY = 'API KEY'
    SCRAPEOPS_PROXY_ENABLED = True
    SCRAPEOPS_PROXY_SETTINGS = {'country': 'fr'}
    INDEED_DOMAIN_URL = "https://fr.indeed.com"
    DOWNLOADER_MIDDLEWARES = {
       "Cy_Scraper.middlewares.IndeedDomainVerificationMiddleware": 543,
       "Cy_Scraper.middlewares.ScrapeOpsProxyMiddleware": 725,
    }

    J'utilise un deuxieme middleware qui me permet d'utliser un proxy pour éviter de me faire detecter.

    Cependant quand je lance ma spider j'ai une boucle infinie.

    Pouvez vous m'aider svp ?


    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2024 à 22:35:13

      Jamais développé de middlewares de cette manière, pourquoi ne respectez vous pas la documentation ?

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        17 janvier 2024 à 9:58:52

        Bonjour,

        Je respecte bien la documentation mais celle de scrapy et non django.
        Ils la définissent de cette manière

        • Partager sur Facebook
        • Partager sur Twitter
          17 janvier 2024 à 10:02:32

          Désolé, j'ai cru que vous utilisiez Django, ça ressemblait beaucoup...

          -
          Edité par fred1599 17 janvier 2024 à 11:30:47

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

          Scraping avec Scrapy

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          • Editeur
          • Markdown