Python 如何恢复刮痧蜘蛛它停止了?

Python 如何恢复刮痧蜘蛛它停止了?,python,django,scrapy,scrapy-spider,Python,Django,Scrapy,Scrapy Spider,我有一个非常大的网站与许多网址,我想蜘蛛。有没有办法告诉Scrapy忽略URL列表 现在我将所有URL存储在DB列中,我希望能够重新启动spider,但将长列表(24k行)传递给Scrapy,以便它知道跳过已经看到的URL 有什么办法可以这样做吗 class MySpider(Spider): custom_settings = { 'AUTOTHROTTLE_ENABLED': True, 'DOWNLOAD_DELAY': 1.5, '

我有一个非常大的网站与许多网址,我想蜘蛛。有没有办法告诉Scrapy忽略URL列表

现在我将所有URL存储在DB列中,我希望能够重新启动spider,但将长列表(24k行)传递给Scrapy,以便它知道跳过已经看到的URL

有什么办法可以这样做吗

class MySpider(Spider):
    custom_settings = {
        'AUTOTHROTTLE_ENABLED': True,
        'DOWNLOAD_DELAY': 1.5,
        'DEPTH_LIMIT': 0,
        'JOBDIR': 'jobs/scrapy_1'
    }

    name = None
    allowed_domains = []
    start_urls = []

    def parse(self, response):
        for link in le.extract_links(response):
            yield response.follow(link.url, self.parse)

你必须将刮取的URL存储在某个地方,我通常在MySQL中这样做,然后当我重新启动刮取器时,我会像这样忽略它们

class YourSpider(scrapy.Spider):

    def parse(self, response):
        cursor.execute("SELECT url FROM table")

        already_scraped = tuple(a['url'] for a in cursor.fetchall())

        for link in le.extract_links(response):
            if url not in already_scraped:
                yield Request(...)
            else:
                self.logger.error("%s is already scraped"%(link.url))

检查数据库中的信息:

def check_duplicate_post_links(self, links):
    new_links = []
    for link in links:
        sql = 'SELECT id FROM your_table WHERE url = %s'
        self.cursor.execute(sql, (url,))
        duplicate_db = self.cursor.fetchall()

        if duplicate_db:
            self.logger.error("error url duplicated: {}".format(link))
        else:
            new_links.append(link)

    return new_links


class YourSpider(scrapy.Spider):

    def parse(self, response):
        links = le.extract_links(response):
        new_links = self.check_duplicate_post_links(links)

        if len(new_links) > 0:
            for link in new_links:
                #Add your information
                item = YourScrapyItem()
                item['url'] = link.url

                yield item

如果您提供一些代码,它会很有帮助。否则答案就不能满足您的需要。我添加了我的代码。我看到scrapy提供工作。然而,在当前的设置下,scrapy似乎并没有正确地选择上一份工作的结束位置。太好了,正是我想要的!谢谢大家投票并接受我的答案,同时请注意我使用了
tuple
而不是
list
。。。这是因为元组使用的内存比
list
要少。你能澄清一下newurl应该是什么吗?:P我写了
newurl
只是为了让你理解,
newurl
是你想要抓取的新url列表,但它是一个蜘蛛。我没有确切的新URL列表