J'utilise actuellement Scrapy pour mon projet sur le référentiel institutionnel universitaire où j'ai besoin d'obtenir le lien externe pour chaque université. Existe-t-il un moyen pour moi de refuser certaines URL telles que "google.com" et "twitter.com"? Voici ce que j'ai en ce moment. Je suis nouveau à ces derniers donc toute aide serait appréciée. Je vous remercie!

 import scrapy 

    class UtmSpider(scrapy.Spider):
        name = 'utm'
        start_urls = ['http://eprints.utm.my/id/eprint/']


        def start_requests(self):
            yield scrapy.Request('http://eprints.utm.my/id/eprint/', self.parse)

        def parse(self, response):
            for href in response.xpath('//a/@href').getall():
                yield scrapy.Request(response.urljoin(href), self.parse)
2
Izzati_96 11 mars 2019 à 02:43

2 réponses

Meilleure réponse
ignore = ['google', 'twitter']
def parse(self, response):
    for href in response.xpath('//a/@href').getall():
        for kw in ignore:
            if kw not in href.lower():
                yield scrapy.Request(response.urljoin(href), self.parse)

Tel que demandé

ÉDITER:

Vous avez demandé comment exclure certains liens contenant du texte comme les exemples que vous avez donnés, Google et Twitter.

Je n'ai pas changé ce que fait votre code, mais j'ai simplement ajouté une instruction conditionnelle qui vérifiera si le href contient les mots-clés.

Nous créons une liste (notre liste de termes exclus). Ensuite, nous devrons répéter cette liste chaque fois que nous voulons vérifier un lien, donc plus la liste de mots clés est courte, mieux c'est.

Si la valeur du mot clé ne fait pas partie de la chaîne href, nous transmettons et continuons l'itération du lien href. Sinon, nous le cédons à la place.

J'espère que cela t'aides

-1
Swift 11 mars 2019 à 12:53

Si votre araignée est simple, la solution de Swift fonctionnera très bien. Si votre spider/spiders contient beaucoup de code, vérifier les URL à chaque fois que vous souhaitez émettre une requête polluera votre code. Dans ce cas, vous pouvez utiliser le pipeline DownloaderMiddleware. https://docs.scrapy.org/en/latest/topics/ downloader-middleware.html Si vous recherchez « IgnoreRequest », vous trouverez une description de la façon d'implémenter un DownloaderMiddleware qui pourra rejeter certaines demandes.

0
Maksim Kviatkouski 11 mars 2019 à 00:45