【发布时间】:2018-12-31 15:58:43
【问题描述】:
我的 scrapy 蜘蛛正在爬取论坛,但我不想这样做。
规则在 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] 调试:已爬网 (200) https://www.example.com/forum/online/News-...
我认为我的正则表达式对于避免 /forum/ url 是错误的?
(尝试了几个["\/forum/.*"], [".*forum.*"], ["\/forum.*"]但它似乎总是同一个问题 - 其他拒绝/跟随错误似乎正在工作)
【问题讨论】:
-
一个简单的问题:那些
https://www.example.com/forum/online/News-*页面是直接从某个现有页面 链接的,还是重定向的结果(例如,链接到example.com/f?pid=foobar 的页面会重定向到@987654322 @): -
这些论坛页面链接自多个页面,其中一些是我关注并想抓取的。
-
我很困惑;您是说您的日志包含“crawler../forum/”,这意味着这些页面正在被抓取。您在这里的预期行为是什么?
-
我不想抓取它们。也许
follow = False和deny仍然会抓取一页而不抓取任何链接?但我假设如果一个链接包含forum,它应该首先被忽略?