Какой порядок следует соблюдать, когда Scrapy CrawlSpider соскребает страницы? - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в Scrapy и читаю Learning Scrapy для учебы, и у меня есть вопрос по поводу порядка чистки.

В книге представлен фрагмент кода:

rules = (
    Rule(LinkExtractor(restrict_xpaths='//*[contains(@class,"next")]')),
    Rule(LinkExtractor(restrict_xpaths='//*[@itemprop="url"]'),
        callback='parse_item')
)

И там сказано, что Scrapy использует стратегию LIFO для ползания.Поэтому я предполагаю, что первым элементом должен быть элемент на последней странице, но оказывается, что первый элемент находится на первой странице.

Почему?Согласно коду, я думаю, что Scrapy будет следовать первому правилу, пока не найдет последнюю страницу, а затем начнет анализировать элементы на последней странице.Я в замешательстве.

А если у сайта миллионы страниц, Scrapy не будет анализировать какие-либо элементы, пока не достигнет последней страницы?

1 Ответ

0 голосов
/ 16 мая 2018

Все правила соблюдаются на каждой странице в порядке кортежей.

Например, у вас есть два правила:

  1. найти другие страницы нумерации страниц (без обратного вызова)
  2. найти товары (с обратным вызовом)

Если вы запустите этого паука на 1-й странице, он найдет другие URL-адреса нумерации страниц и запланирует их, затем найдет продукты и запланирует их с помощью обратного вызова parse_product или чего-либо еще, что вы установили.После этого для любого запланированного URL, который имеет обратный вызов по умолчанию (где вы не указали аргумент callback), он будет повторяться до тех пор, пока ничего не будет найдено.

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