【发布时间】:2013-05-28 08:31:06
【问题描述】:
帮助!阅读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 的好方法吗?还有什么?
非常感谢!!!
感谢您的回答。但我仍然有点困惑: By default, Scrapy uses a LIFO queue for storing pending requests.
- 蜘蛛的回调函数生成的
requests将提供给scheduler.谁对start_url's requests做同样的事情?蜘蛛start_requests()函数只生成一个迭代器而不给出 真正的要求。 - 所有
requests(start_url 和callback)会在同一个请求的队列中吗?Scrapy中有多少个队列?
【问题讨论】:
标签: python python-2.7 web-scraping scrapy web-crawler