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」という Web ページに出くわしても、何も出力しません。でコード化します。コールバックの呼び出しに問題があるようです。

4

1 に答える 1

1

docsから、2番目のルールが呼び出されることはないと思います:

複数のルールが同じリンクに一致する場合、この属性で定義されている順序に従って、最初のルールが使用されます。

最初のものは2番目のものと一致するため、about.htmlコールバックは発生していません。

最初のルールにコールバックを追加するとうまくいくと思います

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

または、aboutページに対してコールバックをテストしたいだけの場合は、最初のルールを削除してください

于 2013-05-23T01:13:01.530 に答える