拒绝某些网址

时间:2019-03-10 23:43:49

标签: python scrapy

我目前在大学机构存储库上的项目中使用Scrapy,我需要获取每所大学的外部链接。我是否可以拒绝某些网址,例如“ google.com”和“ twitter.com”。以下是我目前所拥有的。我是新手,所以我们将不胜感激。谢谢!

 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 个答案:

答案 0 :(得分:0)

如果您的蜘蛛很简单,那么Swift的解决方案就可以了。 如果您的蜘蛛程序/蜘蛛程序中包含大量代码,则每次您要发出请求时检查url都会污染您的代码。在这种情况下,您可以使用DownloaderMiddleware管道。 https://docs.scrapy.org/en/latest/topics/downloader-middleware.html 如果您搜索“ IgnoreRequest”,则会找到有关如何实现能够丢弃某些请求的DownloaderMiddleware的说明。

答案 1 :(得分:-1)

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)

根据请求

编辑:

您问过如何排除某些包含文本的链接,例如您所举的示例,Google和Twitter。

我没有更改您的代码的功能,只是添加了一条条件语句,该语句将检查href是否包含关键字。

我们创建一个列表(我们排除条款的列表)。然后,我们每次要检查链接时都需要迭代该列表,因此关键字列表越短越好。

如果关键字值不是href字符串的一部分,我们将传递并继续执行href链接迭代。否则,我们会产生它。

希望这会有所帮助