Python 当scrapy到达上一次运行的起点时,如何阻止它爬行

Python 当scrapy到达上一次运行的起点时,如何阻止它爬行,python,scrapy,Python,Scrapy,我正在制作一个蜘蛛,它将在第一次运行时抓取整个站点,并将数据存储在我的数据库中 但是我会每周继续运行这个爬行器,以获取数据库中已爬网站点的更新,我不希望scrapy爬网数据库中已经存在的页面。如何实现这一点,我制定了两个计划- 1] 制作一个爬虫来获取整个站点,并以某种方式将第一个获取的URL存储在csv文件中,然后继续跟踪下一页。然后创建另一个爬虫程序,它将开始向后抓取,这意味着它将从csv中的URL获取输入,并继续运行,直到上一页退出。这样,我将获取数据,但csv中的URL将被爬虫两次 2]

我正在制作一个蜘蛛,它将在第一次运行时抓取整个站点,并将数据存储在我的数据库中

但是我会每周继续运行这个爬行器,以获取数据库中已爬网站点的更新,我不希望scrapy爬网数据库中已经存在的页面。如何实现这一点,我制定了两个计划-

1] 制作一个爬虫来获取整个站点,并以某种方式将第一个获取的URL存储在csv文件中,然后继续跟踪下一页。然后创建另一个爬虫程序,它将开始向后抓取,这意味着它将从csv中的URL获取输入,并继续运行,直到上一页退出。这样,我将获取数据,但csv中的URL将被爬虫两次

2] 制作一个爬虫程序,它将检查数据库中的数据是否存在,然后停止,是否可能?这将是最有效的方法,但我找不到出路。也许制作日志文件在某种程度上会有所帮助

更新 该网站是一个经常更新的博客,并以最新的方式排序为最新的帖子

from scrapy import Spider
from scrapy.http import Request, FormRequest



class MintSpiderSpider(Spider):

    name = 'Mint_spider'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com/']

    def parse(self, response):
        urls =  response.xpath('//div[@class = "post-inner post-hover"]/h2/a/@href').extract()

        for url in urls:
            if never_visited(url, database):
                yield Request(url, callback=self.parse_lyrics) #do you mean parse_foo ?

        next_page_url = response.xpath('//li[@class="next right"]/a/@href').extract_first()
        if next_page_url:
            yield scrapy.Request(next_page_url, callback=self.parse)


    def parse_foo(self, response):
        save_url(response.request.url, database)
        info = response.xpath('//*[@class="songinfo"]/p/text()').extract()
        name =  response.xpath('//*[@id="lyric"]/h2/text()').extract()

        yield{
            'name' : name,
            'info': info
        }
您只需要实现从不访问和保存url函数。
如果url已经存在,则从未访问过的用户将签入您的数据库。保存url会将url添加到您的数据库中。

如果您不在网站上提供更多信息,很难判断哪个解决方案最适合您。你能告诉我们哪一个被擦掉了,它是如何更新的吗?例如,是否有一个页面在第一个位置显示新文章(比如博客?)是的,你做对了,这就像博客一样,这取决于很多事情。你会放弃主页,产生文章的url,然后放弃每篇文章的内容吗?在这种情况下,一篇文章是否随时间保持相同的url?还是直接从主页上删除内容?是的,它永远使用相同的URL,我在网站的每个URL/博客帖子上提取部分内容,并在每个页面上继续这样做,因此每次删除文章时,您都可以将URL添加到数据库中,并在再次生成之前检查您是否已经删除了URL?