У меня есть регулярные выражения в файле JSON.Этот файл загружается как конфигурация для моего паука.Паук создает один LinkExtractor с правилами регулярных выражений allow
и deny
.Я хотел бы:
- сканировать и очищать страницы продукта (очистка / анализ НЕ работает)
- сканировать страницы категорий
- избегать общих страниц (о нас,конфиденциальность и т. д.)
В некоторых магазинах все работает хорошо, но не в других, и я считаю, что это проблема моих регулярных выражений.
"rules": [
{
"deny": ["\\/(customer\\+service|ways\\+to\\+save|sponsorship|order|cart|company|specials|checkout|integration|blog|brand|account|sitemap|prefn1=)\\/"],
"follow": false
},
{
"allow": ["com\\/store\\/details\\/"],
"follow": true,
"use_content": true
},
{
"allow": ["com\\/store\\/browse\\/"],
"follow": true
}
],
Шаблоны URL:
Продукты:
https://www.example.com/store/details/Nike+SB-Portmore-II-Solar-Canvas-Mens https://www.example.com/store/details/Coleman+Renegade-Mens-Hiking https://www.example.com/store/details/Mueller+ATF3-Ankle-Brace https://www.example.com/store/details/Planet%20Fitness+18 https://www.example.com/store/details/Lifeline+Pro-Grip-Ring https://www.example.com/store/details/Nike+Phantom-Vision
Категории:
https://www.example.com/store/browse/footwear/
https://www.example.com/store/browse/apparel/
https://www.example.com/store/browse/fitness/
Запретить:
https://www.example.com/store/customer+service/Online+Customer+Service https://www.example.com/store/checkout/ https://www.example.com/store/ways+to+save/ https://www.example.com/store/specials https://www.example.com/store/company/Privacy+Policy https://www.example.com/store/company/Terms+of+Service
Загрузка правил изJSON внутри моего паука __init__
for rule in self.MY_SETTINGS["rules"]:
allow_r = ()
if "allow" in rule.keys():
allow_r = [a for a in rule["allow"]]
deny_r = ()
if "deny" in rule.keys():
deny_r = [d for d in rule["deny"]]
restrict_xpaths_r = ()
if "restrict_xpaths" in rule.keys():
restrict_xpaths_r = [rx for rx in rule["restrict_xpaths"]]
Sportygenspider.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
))
Если я сделаю pprint(vars(onerule.link_extractor))
, я смогу правильно увидеть регулярное выражение Python:
'deny_res': [re.compile('\\/(customer\\+service|sponsorship|order|cart|company|specials|checkout|integration|blog|account|sitemap|prefn1=)\\/')]
{'allow_domains': set(),
'allow_res': [re.compile('com\\/store\\/details\\/')],
{'allow_domains': set(),
'allow_res': [re.compile('com\\/store\\/browse\\/')],
Проверка регулярного выражения в https://regex101.com/Кажется, все в порядке (несмотря на то, что я использую \\/
в моем файле JSON и \/
в regex101.com)
В моем лог-файле паука, я вижу, чтостраницы продукта сканируются, но не анализируются:
2019-02-01 08:25:33 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.example.com/store/details/FILA+Hometown-Mens-Lifestyle-Shoes/5345120230028/_/A-6323521;> (referer: https://www.example.com/store/browse/footwear)
2019-02-01 08:25:47 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.example.com/store/details/FILA+D-Formation-Mens-Lifestyle-Shoes/5345120230027/_/A-6323323> (ref
Почему паук не анализирует страницы продукта?(один и тот же код, разные JSON работают в разных магазинах)