Параметр Follow не работает при настройке правила в crawlspider.

1

Я хочу извлечь ссылку, которую хочу получить только на первой странице, и я установил DEPTH_LIMIT в 1 в искателя, а правило параметра() в правиле сопоставления следует = False, но я все еще инициировал несколько запросов, я не знаю Зачем. Надеюсь, кто-то может ответить на мои сомнения. Заранее спасибо.

# -*- coding: utf-8 -*-

import scrapy
from scrapy.http import Request
from scrapy.spiders import CrawlSpider,Rule
from scrapy.linkextractors import LinkExtractor

class OfficialSpider(CrawlSpider):
    name = 'official'
    allowed_domains = ['news.chd.edu.cn','www.chd.edu.cn']
    start_urls = ['http://www.chd.edu.cn']

    custom_settings = {
        'DOWNLOAD_DELAY':0,
        'DEPTH_LIMIT':1,
    }

    rules = (
        # Rule(LinkExtractor(allow=('http://news.chd.edu.cn/',)),callback='parse_news',follow=False),
        Rule(LinkExtractor(allow=('http://www.chd.edu.cn/')),callback='parse_item',follow=False),
        Rule(LinkExtractor(allow=("",)),follow=False),
    )

    def parse_news(self,response):
        print(response.url)
        return {}

    def parse_item(self,response):
        self.log("item链接:")
        self.log(response.url)

output: введите описание изображения здесь

  • 0
    Я не понимаю, какой результат вы ожидали. Думаете ли вы, что follow=False заставит скрап игнорировать ваше правило?
  • 0
    Я думаю, что после follow=False , сканер должен получить доступ только к start_urls , но посмотрите журнал, он все еще инициирует другие запросы, я не знаю почему. Мой уровень английского немного плох, я не знаю, понятно ли это.
Показать ещё 1 комментарий
Теги:
python-3.x
scrapy

1 ответ

0

Из документов:

follow - это логическое значение, которое указывает, следует ли следовать ссылкам из каждого ответа, извлеченного с помощью этого правила.

Это означает, что follow=False только остановит искатель от следующих ссылок, найденных при обработке ответа, созданного этим правилом, и не может повлиять на найденные при анализе результата start_urls.

Не было бы смысла в follow аргументе, полностью отключив правило; если вы не хотите использовать правило, зачем вы его вообще создадите?

  • 0
    Кажется, я знаю, что роль follow=False состоит в том, чтобы извлечь ссылки, соответствующие правилам, из ответа, полученного доступом start_urls , а затем продолжить доступ к этим ссылкам, чтобы получить ответ, и проанализировать ссылки, соответствующие правилам. , follow=False предотвращает дальнейшее отслеживание. Я не знаю, думаю ли я так. Если я хочу извлечь ссылку из ответа, полученного из заданного start_urls , но не извлекать ее дальше, что мне следует делать лучше всего? Я надеюсь получить совет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню