Правило Scrapy CrawlSpider не соблюдается? - PullRequest
0 голосов
/ 31 декабря 2018

Мой паук-скрап сканирует форумы, но я не хочу этого.

Правила находятся в файле json:

"rules": [
{
    "allow": ["\\/topic\/.*"],
    "follow": true
},
{
    "allow": ["\\/tr\\/article\\/.*.html"],
    "follow": false,
    "use_content": true
},
{
    "deny": ["\/forum\/.*"],
    "follow": false
},

Мой паук загружает файл jsonи разбор правил.Работа allow и use_content, мое правило форума, похоже, игнорируется.

        # add all rules from JSON file in a for loop:
        deny_r = ()
        if "deny" in rule.keys():
            deny_r = [d for d in rule["deny"]]

        Genspider.rules.append(Rule(
            LinkExtractor(
                allow=allow_r,
                deny=deny_r,
                restrict_xpaths=restrict_xpaths_r,
            ),
            follow=rule["follow"],
            callback='parse_item' if ("use_content" in rule.keys()) else None
        ))

Их довольно много:

2018-12-31 07:45:30 [scrapy.core.engine] ОТЛАДКА: Crawled (200) https://www.example.com/forum/online/News-...

Я полагаю, мое регулярное выражение неправильно для избегания / forum / urls?(пробовал несколько ["\/forum/.*"], [".*forum.*"], ["\/forum.*"], но, похоже, это всегда одна и та же проблема - похоже, что другие команды deny / follow false работают)

1 Ответ

0 голосов
/ 01 января 2019

Вы должны добавить deny ко всем правилам.Почему?

Как описано в Документация правила

правила: список из одного (или более) объектов правила.Каждое правило определяет определенное поведение для сканирования сайта.Правила объектов описаны ниже.Если несколько правил соответствуют одной и той же ссылке, будет использовано первое, в соответствии с порядком, определенным в этом атрибуте.

Так что, если любое из первых двух правил применимо к URL-адресам форума, оно будетследует, если для него не определена запрещающая запись.

Ваши правила JSON должны выглядеть следующим образом

"rules": [
{
    "deny": ["\/forum\/.*"],
    "allow": ["\\/topic\/.*"],
    "follow": true
},
{
    "deny": ["\/forum\/.*"],
    "allow": ["\\/tr\\/article\\/.*.html"],
    "follow": false,
    "use_content": true
}
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...