Scrapy CrawlSpider: глубина URL - PullRequest
       13

Scrapy CrawlSpider: глубина URL

0 голосов
/ 21 февраля 2020

Я пытаюсь реализовать ту же функциональность, что и в ScreamingFrog - измерить глубину URL. Для этого я получаю доступ к параметру глубины response.meta, вот так: response.meta.get('depth', 0), но полученные результаты сильно отличаются от результатов ScreamingFrog. Поэтому я хотел выяснить, почему это происходит, сохранив все страницы, через которые прошел CrawlSpider, чтобы перейти на текущую страницу.

Так выглядит мой текущий паук :

class FrSpider(scrapy.spiders.CrawlSpider):
    """Designed to crawl french version of dior.com"""

    name = 'Fr'
    allowed_domains = [website]
    denyList = []

    start_urls = ['https://www.%s/' % website]
    rules = (Rule(LinkExtractor(deny=denyList), follow=True, callback='processLink'),)

    def processLink(self, response):
        link = response.url
        depth = response.meta.get('depth', 0)
        print('%s: depth is %s' % (link, depth))

Вот сравнение статистики сканирования (того же сайта, ограничено первыми ~ 500 страницами) между моим сканером и screamingfrog:

Depth(Clicks from Start Url)  Number of Urls  % of Total
1                             62              12.4
2                             72              14.4
3                             97              19.4
4                             49              9.8
5                             40              8.0
6                             28              5.6
7                             46              9.2
8                             50              10.0
9                             56              11.2
----------------------------  --------------  ----------

против

screaming frog

Как вы можете видеть, он сильно отличается, и расширение сканирования с первых 500 страниц до полного веб-сайта показывает огромное расхождение между двумя подходами.

Мне было интересно, может ли кто-нибудь указать мне на ошибку, которую я делаю, или помочь советом о том, как мне сохранить все страницы, пройденные сканером, чтобы попасть на текущую страницу. Визуализация будет выглядеть так: website tree

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Оказывается, проблема в порядке сканирования по умолчанию scrapy . Изменяя его с DFO на BFO, я получаю ожидаемую статистику.

0 голосов
/ 21 февраля 2020

Вы можете попробовать DEPTH_STATS_VERBOSE (в настройках), а затем проверить, равны ли оба результата.

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