Я создал следующий паук для сканирования:
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, и они прекрасно работают.Возможно ли, что правила не будут реализованы в случае переадресации?Пока это мое лучшее предположение, но я не смог подтвердить это.Или, может быть, есть еще один вопрос?