Как остановить гусеничного - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь написать сканер, который идет на веб-сайт и ищет список ключевых слов с max_Depth, равным 2. Но предполагается, что сборщик остановится, как только какое-либо ключевое слово появится на любой странице, проблема, с которой я сталкиваюсьпрямо сейчас сканер не останавливается, когда впервые видит какое-либо из ключевых слов.

Даже после попытки выполнить раннюю команду возврата, команду разрыва и команды CloseSpider и даже команды выхода python.

Мой класс сканера:

class WebsiteSpider(CrawlSpider):

name = "webcrawler"

allowed_domains = ["www.roomtoread.org"]
start_urls = ["https://"+"www.roomtoread.org"]
rules = [Rule(LinkExtractor(), follow=True, callback="check_buzzwords")]

crawl_count = 0
words_found = 0                                 

def check_buzzwords(self, response):

    self.__class__.crawl_count += 1

    crawl_count = self.__class__.crawl_count

    wordlist = [
        "sfdc",
        "pardot",
        "Web-to-Lead",
        "salesforce"
        ]

    url = response.url
    contenttype = response.headers.get("content-type", "").decode('utf-8').lower()
    data = response.body.decode('utf-8')

    for word in wordlist:
            substrings = find_all_substrings(data, word)
            for pos in substrings:
                    ok = False
                    if not ok:
                        if  self.__class__.words_found==0:
                            self.__class__.words_found += 1
                            print(word + "," + url + ";")
                            STOP!




    return Item()

def _requests_to_follow(self, response):
    if getattr(response, "encoding", None) != None:
            return CrawlSpider._requests_to_follow(self, response)
    else:
            return []

Я хочу, чтобы оностановить выполнение, когда if not ok: равно True.

1 Ответ

1 голос
/ 24 июня 2019

Когда я хочу остановить паука, я обычно использую исключение exception scrapy.exceptions.CloseSpider(reason='cancelled') из Scrapy-Docs .

В приведенном здесь примере показано, как вы можете использоватьэто:

if 'Bandwidth exceeded' in response.body:
    raise CloseSpider('bandwidth_exceeded')

В вашем случае что-то вроде

if not ok:
    raise CloseSpider('keyword_found')

Или это то, что вы имели в виду

Команды CloseSpider

а уже пробовал?

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