幫助!閱讀Scrapy
的源代碼對我來說並不容易。 我有很長的start_urls
名單。它在一個文件中大約是3,000,000。於是,我讓start_urls
這樣的:順序的Scrapy爬行URL與長start_urls列表和url從蜘蛛yiels
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
使用?(我做了一些測試,似乎 答案爲否) - 什麼決定順序後使用?爲什麼以及這個訂單如何?我們如何控制它?
- 這是一個很好的方式來處理已經在文件中的這麼多網址嗎?還有什麼?
非常感謝!
感謝answers.But我還是有點糊塗: By default, Scrapy uses a LIFO queue for storing pending requests.
- 蜘蛛回調函數的
requests
提出將給予scheduler
。誰做同樣的事情到start_url's requests
蜘蛛?start_requests()
函數只產生一個迭代器而不給 真實的請求。 - 所有
requests
(start_url和回調的)是否在同一個請求隊列中?Scrapy
中有多少個隊列?
非常感謝!我仍然有點困惑。[默認情況下,Scrapy使用LIFO隊列來存儲待處理的請求。](http://doc.scrapy.org/en/latest/faq.html#does -scrapy抓取功能於呼吸第一或深度優先順序)。 –
我補充了我的問題。評論太長了。希望能得到你的答案。非常感謝你! –