【问题标题】:Scrapy CrawlSpider Rule not being followed?不遵循 Scrapy CrawlSpider 规则?
【发布时间】: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 = Falsedeny 仍然会抓取一页而不抓取任何链接?但我假设如果一个链接包含forum,它应该首先被忽略?

标签: regex scrapy


【解决方案1】:

您需要在所有规则中添加拒绝。为什么?

Rule documentation中所述

rules :这是一个(或多个)规则对象的列表。每个规则都定义了爬取网站的特定行为。规则对象如下所述。如果多个规则匹配同一个链接,将使用第一个,根据在此属性中定义的顺序。

因此,如果前两条规则中的任何一条适用于论坛 URL,除非为其定义了拒绝条目,否则将遵循该规则。

您的规则 JSON 应如下所示

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

【讨论】:

  • 听起来不错,但似乎仍然无法正常工作。我已经按照您的建议进行了尝试,在这种情况下,蜘蛛不会解析任何内容.. 只是爬行而不是解析。
猜你喜欢
  • 1970-01-01
  • 2016-03-24
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多