Применяются ли правила скрапинга к перенаправлениям? - PullRequest
0 голосов
/ 30 ноября 2018

Я создал следующий паук для сканирования:

from .other_rules import default_rules

class MyProjectSpider(CrawlSpider):
    name = 'my_spider'

    def __init__(self, *args, **kwargs):
        self.allowed_domains = [kwargs.get('domain')]
        self.start_urls = [kwargs.get('start_link')]
        aditional_rules = kwargs.get('rules')

        if aditional_rules!=None:
            aditional_rules = aditional_rules.split(', ')
            rules = tuple(default_rules + aditional_rules)
        else:
            rules = tuple(default_rules)

        self.rules = (
            Rule(LinkExtractor(deny=rules), callback='parse_item', follow=True),
        )
        super(MyProjectSpider, self).__init__(*args, **kwargs)

Моя цель - удалить все ссылки, которые содержат определенные символы ('?', '&' ...), а также ссылки на языкстраницы, которые не на английском языке.Я сделал список в другом файле и импортировал его.Итак, первая пара правил выглядит примерно так:

default_rules = [
        r'[\S]{0,}/[0-9]{1,5}/[\S]{0,}',
        r'[\S]{0,}[?]{1,}[\S]{0,}',
        r'[\S]{0,}[&]{1,}[\S]{0,}',
        r'[\S]{0,}[=]{1,}[\S]{0,}',
        r'[\S]{0,}/abkhazian/[\S]{0,}',
        r'[\S]{0,}/ab/[\S]{0,}',
        r'[\S]{0,}/afar/[\S]{0,}',
        r'[\S]{0,}/aa/[\S]{0,}',
        ...

]

Я протестировал этот скрипт, и он отлично работает для языков.Однако часто я замечаю, что правила, касающиеся символов, не были полностью реализованы.Например, когда я пробую новости Yahoo, скрипт не перехватывает URL-адреса вроде этого: https://sports.yahoo.com/college-womens-basketball/?_guc_consent_skip=1543573861/

Я протестировал эти выражения регулярных выражений в оболочке Python, и они прекрасно работают.Возможно ли, что правила не будут реализованы в случае переадресации?Пока это мое лучшее предположение, но я не смог подтвердить это.Или, может быть, есть еще один вопрос?

1 Ответ

0 голосов
/ 30 ноября 2018

Экстрактор ссылок вашего правила используется только для извлечения ссылок с проанализированных страниц.
Он не имеет никакой функции, кроме того, это не повлияет на перенаправления.

Если вы хотите контролировать, какие перенаправленияДалее вам, вероятно, понадобится пользовательское промежуточное ПО для перенаправления.
Изменение встроенного RedirectMiddleware в соответствии с вашими потребностями не должно быть слишком сложным.


Как примечание, правила работают с частичными совпадениями.
Это означает, что каждый экземпляр [\S]{0,} (лучше написано \S*) может быть опущен.
Это также означает, что ваш список default_rules можно упростить до:

default_rules = [
    r'/\d{1,5}/',
    r'\?',
    r'&',
    r'=',
    r'/abkhazian/',
    r'/ab/',
    r'/afar/',
    r'/aa/',
    ...

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