帮助!阅读源代码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!"
同时,我的蜘蛛的回调函数是这样的:</p>
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
器使用吗?(我做了一些测试,似乎答案是否定的) - 什么决定顺序?这个顺序为什么以及如何?我们如何控制它?
- 这是处理文件中已有这么多网址的好方法吗?还有什么?
非常感谢你!!!
感谢您的回答。但我仍然有点困惑: 默认情况下,Scrapy 使用 LIFO 队列来存储挂起的请求。
- 蜘蛛制作的
requests
回调函数会交给scheduler
谁来做同样的事情start_url's requests
?蜘蛛start_requests()
函数只会生成一个迭代器,不会给出真正的请求。 - 所有
requests
(start_url 和回调)会在同一个请求的队列中吗?有多少个队列Scrapy
?