Как Scrapy работает с URL-адресами, указанными в переменной urls в start_requests? - PullRequest
0 голосов
/ 24 февраля 2019

Просто интересно, почему, когда у меня есть url = ['site1', 'site2'] и я запускаю scrapy из скрипта, используя .crawl () дважды, в строке, как

 def run_spiders():    
    process.crawl(Spider)
    process.crawl(Spider)

, получается:

site1info
site1info
site2info
site2info 

в отличие от

site1info
site2info
site1info
site2info

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Потому что, как только вы наберете process.start(), запросы будут обрабатываться асинхронно.Порядок не гарантируется.

На самом деле, даже если вы звоните process.crawl() только один раз, иногда вы можете получить:

site2info
site1info

Чтобы запустить пауков последовательно из Python, см. этот другой ответ .

0 голосов
/ 25 февраля 2019

Start Request использует функциональность yield.приносить в очередь запросы.Чтобы понять это полностью, прочитайте этот ответ StackOverflow.

Вот пример кода, как он работает с start_urls в методе start_request.

start_urls = [
    "url1.com",
    "url2.com",
   ]    

 def start_requests(self):
    for u in self.start_urls:
        yield scrapy.Request(u, callback=self.parse)

Для упорядочения пользовательских запросов может использоваться эта функция приоритета.

def start_requests(self):
    yield scrapy.Request(self.start_urls[0], callback=self.parse)
    yield scrapy.Request(self.start_urls[1], callback=self.parse, priorty=1)

та, которая имеет более высокий приоритет, будет получена первой из очереди.По умолчанию приоритет равен 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...