0

我目前正在尝试使用 Scrapy 框架来简单地收集一堆我可以在以后存储和排序的 URL。但是,无论我尝试过什么并从其他教程改编,我似乎都无法在回调时打印或存储在文件中的 URL。对于这个特定的例子,我目前正在使用我的蜘蛛类,选择一个小站点:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from crawler.items import CrawlerItem
from scrapy import log

class CrawlerSpider(CrawlSpider):
    name = 'crawler'

    allowed_domains = [
        "glauberkotaki.com"
    ]

    start_urls = [
        "http://www.glauberkotaki.com"
    ]

    rules = (
        Rule(SgmlLinkExtractor(allow=(), deny=('about.html'))),
        Rule(SgmlLinkExtractor(allow=('about.html')), callback='parseLink', follow="yes"),
    )

    def parseLink(self, response):
        x = HtmlXPathSelector(response)
        print(response.url)
        print("\n")

它可以很好地抓取该站点的所有页面,但它根本不会打印任何内容,即使它遇到网页“www.glauberkotaki.com/about.html”,这是我试图测试的与代码。在我看来,回调被调用存在问题。

4

1 回答 1

1

我认为您的第二条规则从未被调用过,来自文档

如果多个规则匹配同一个链接,将使用第一个,根据在此属性中定义的顺序。

因为第一个匹配about.html第二个的回调没有被触发。

我相信将回调添加到第一条规则会起作用

Rule(SgmlLinkExtractor(allow=(), deny=('about.html'), callback='parseLink')),

或者,如果您只想针对 about 页面测试回调,请删除第一条规则

于 2013-05-23T01:13:01.530 回答