Правила Scrapy: исключить определенные URL с ссылками на процессы - PullRequest
0 голосов
/ 26 июня 2019

Я очень рад, что открыл класс Scrapy Crawl с его объектами правил. Однако, когда я пытаюсь извлечь URL, которые содержат слово «логин», с помощью process_links, это не работает. Решение, которое я реализовал, приходит отсюда: Пример кода для Scrapy process_links и process_request , но он не исключает нужные мне страницы

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.loader import ItemLoader
from accenture.items import AccentureItem

class AccentureSpiderSpider(CrawlSpider):
    name = 'accenture_spider'
    start_urls = ['https://www.accenture.com/us-en/internet-of-things-index']

    rules = (
        Rule(LinkExtractor(restrict_xpaths='//a[contains(@href, "insight")]'), callback='parse_item',process_links='process_links', follow=True),
    ) 

    def process_links(self, links):
        for link in links:
            if 'login' in link.text:
                continue  # skip all links that have "login" in their text
            yield link 

    def parse_item(self, response):
        loader = ItemLoader(item=AccentureItem(), response=response)
        url = response.url
        loader.add_value('url', url)
        yield loader.load_item()

1 Ответ

1 голос
/ 05 июля 2019

Моя ошибка заключалась в использовании link.text. При использовании link.url все работает нормально:)

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