Помощь! Чтение исходного кода Scrapy
нелегко для меня. У меня очень длинный список start_urls
. он составляет около 3 000 000 в файле. Таким образом, я делаю start_urls
так:порядок URL-адресов сканирования Scrapy с длинным списком start_urls и URL-адресами от паука
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 []
мои вопросы:
- порядок адресов, используемых загрузчик? Будут ли запросы сделаны
just_test1
,just_test2
использоваться загрузчиком только после того, как всехstart_urls
используются? (Я сделал несколько тестов, мне кажется, что ответа нет Нет) - Что определяет порядок? Почему и как этот порядок? Как мы можем это контролировать?
- Это хороший способ справиться с таким количеством URL-адресов, которые уже находятся в файле? Что еще?
спасибо!
Спасибо за answers.But Я еще немного запутался: By default, Scrapy uses a LIFO queue for storing pending requests.
requests
сделал функцию обратного вызова пауков будет даноscheduler
.who делает то же самоеstart_url's requests
-паука?start_requests()
функция генерирует только итератор без предоставления реальных запросов.- Будет ли все
requests
(start_url's и callback's) находиться в очереди того же запроса? Сколько очередей вScrapy
?
Большое спасибо! Я все еще немного смущен. [По умолчанию Scrapy использует очередь LIFO для хранения ожидающих запросов.] (Http://doc.scrapy.org/en/latest/faq.html#does -scrapy-ползать-в-дыхание первого или глубинный первый порядок). –
Я дополнил свою проблему. Это слишком долго для комментариев. Надежда может получить ваш ответ. –