Web scraping 对scrapy spider的递归调用

Web scraping 对scrapy spider的递归调用,web-scraping,scrapy,Web Scraping,Scrapy,如何在完成后重新启动同一个spider,以便它可以获取下一个要处理的URL列表。由于我的数据库太大,我不能一次通过所有的网站。所以我需要蜘蛛应该在一个循环中运行,以获取100个网站处理它,然后再次获取100个网站,以此类推。有没有办法在蜘蛛处理完100个网站后给它打电话?请帮我解决这个问题,因为我是新来的。或者是否有任何选项可以安排爬行器在指定的时间间隔后运行 在当前代码中,我可以从域中获取URL并将其存储在数据库中。但我需要一直运行蜘蛛。是否有一种方法可以运行它一次,它将持续运行,直到没有网站

如何在完成后重新启动同一个spider,以便它可以获取下一个要处理的URL列表。由于我的数据库太大,我不能一次通过所有的网站。所以我需要蜘蛛应该在一个循环中运行,以获取100个网站处理它,然后再次获取100个网站,以此类推。有没有办法在蜘蛛处理完100个网站后给它打电话?请帮我解决这个问题,因为我是新来的。或者是否有任何选项可以安排爬行器在指定的时间间隔后运行

在当前代码中,我可以从域中获取URL并将其存储在数据库中。但我需要一直运行蜘蛛。是否有一种方法可以运行它一次,它将持续运行,直到没有网站可以处理。请帮忙

class MyItem(Item):
    url = Field()

class MySpider(CrawlSpider):
    con = MySQLdb.connect(host="localhost", user="user",
                          passwd="pwd", db="db")
    cur = con.cursor(MySQLdb.cursors.DictCursor)
    cur.execute("select website from table limit 100")
    name = "first"
    urls = []
    domains = []
    allowed_domains = []
    start_urls = []
    row = cur.fetchone()
    while row is not None:
        p = "%s" % (row["website"])
        domains.append(p)
        start_urls = "http://www.% s" % p
        urls.append(start_urls)
        row = cur.fetchone()

    allowed_domains = domains
    start_urls = urls
    cur.close()
    con.close()
    print(start_urls)
    rules = (Rule(SgmlLinkExtractor(), callback='parse_url', follow=True),)
    connection = MySQLdb.connect(host="localhost", user="user",
                                 passwd="pwd", db="db")
    cursor = connection.cursor(MySQLdb.cursors.DictCursor)

    def parse_url(self, response):
        item = MyItem()
        item['url'] = response.url
        topDomain = tldextract.extract(response.url)
        tld = topDomain.domain + '.' + topDomain.suffix
        add_url = "INSERT INTO crawl_db (url,tld,time) VALUES (%s,%s,%s)"
        add_url_data = (item['url'], tld, strftime("%Y-%m-%d %H:%M:%S", gmtime()))
        self.cursor.execute(add_url, add_url_data)
        self.connection.commit()

谢谢。

如果为作业传递一个指示其顺序的索引,或者两个指示sql查询的偏移量和限制的值,请检查

我假设您可以使用bash脚本来运行每个作业并传递这些参数,以运行带有额外参数的零碎作业

现在,如果您想在作业完成时运行“something”,可以使用
扩展
,关闭
spider\u


如何创建您自己的扩展,并在
spider\u closed
方法上执行您想要的任何操作。请记住。

我通过创建一个新的python脚本并从代码中调用spider使其正常工作,如下所示:

import os

while True:
    os.system("scrapy crawl first")
因此,它运行spider,获取url并对其进行处理。然后再次使用不同的URL集运行该过程

稍后,我将给出一个条件,一旦数据库没有任何url可处理,就结束

蒂纳库