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