Scrapy对我来说,阅读的源代码并不容易。我的start_urls名单很长。一个文件中大约有3,000,000。所以,我做start_urls这样的:
start_urls = read_urls_from_file(u"XXXX")
def read_urls_from_file(file_path):
with codecs.open(file_path, u"r", encoding=u"GB18030") as f:
for line in f:
try:
url = line.strip()
yield url
except:
print u"read line:%s from file failed!" % line
continue
print u"file read finish!"
意思是,我的蜘蛛的回调函数是这样的:
def parse(self, response):
self.log("Visited %s" % response.url)
return Request(url=("http://www.baidu.com"), callback=self.just_test1)
def just_test1(self, response):
self.log("Visited %s" % response.url)
return Request(url=("http://www.163.com"), callback=self.just_test2)
def just_test2(self, response):
self.log("Visited %s" % response.url)
return []
我的问题是:
下载器使用的URL的顺序?会提出的要求 just_test1
,just_test2
通过下载器只有所有后方可使用 start_urls
,使用?(我做了一些测试,似乎答案是没有)
决定订单的是什么?为什么和如何执行此命令?我们如何控制它?
这是处理文件中已包含许多URL的好方法吗?还有什么?
非常感谢你!!!
感谢您的回答。但是我还是有些困惑: 默认情况下,Scrapy使用LIFO队列存储未决请求。
requests
Spider的回调函数的made将提供给scheduler
.spider函数 做同样的事情start_url's requests
?spider start_requests()
函数仅生成一个迭代器,而没有给出真正的请求。
全部requests
(start_url和回调的)都在同一个请求的队列中吗?有多少个队列Scrapy
?
蝴蝶刀刀
相关分类