9

SgmlLinkExtractor を機能させようとしています。

これは署名です:

SgmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths(), tags=('a', 'area'), attrs=('href'), canonicalize=True, unique=True, process_value=None)

私はちょうど使用していますallow=()

だから、私は入ります

rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)

したがって、最初の URL は'http://www.whitecase.com/jacevedo/'であり、入力しており、それもスキャンされることallow=('/aadler',)を期待し ています。'/aadler/'しかし代わりに、スパイダーは最初の URL をスキャンしてから閉じます。

[wcase] INFO: Domain opened
[wcase] DEBUG: Crawled </jacevedo/> (referer: <None>)
[wcase] INFO: Passed NuItem(school=[u'JD, ', u'Columbia Law School, Harlan Fiske Stone Scholar, Parker School Recognition of Achievement in International and Foreign Law, ', u'2005'])
[wcase] INFO: Closing domain (finished)

ここで何が間違っていますか?

このクモを完成させるのを手伝ってくれる、Scrapy をうまく使った人はここにいますか?

お手伝いありがとう。

以下にスパイダーのコードを含めます。

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from Nu.items import NuItem
from urls import u

class NuSpider(CrawlSpider):
    domain_name = "wcase"
    start_urls = ['xxxxxx/jacevedo/']

    rules = (Rule(SgmlLinkExtractor(allow=("/aadler/", )), callback='parse'),)

    def parse(self, response):
        hxs = HtmlXPathSelector(response)

        item = NuItem()
        item['school'] = hxs.select('//td[@class="mainColumnTDa"]').re('(?<=(JD,\s))(.*?)(\d+)')
        return item

SPIDER = NuSpider()

注: SO では複数の URL を投稿することはできないため、必要に応じて最初の URL を置き換えてください。申し訳ありません。

4

4 に答える 4

10

表示される「解析」メソッドをオーバーライドしています。「解析」は、リンクをたどるために使用されるCrawlSpiderのプライベートメソッドです。

于 2009-11-30T08:33:50.623 に答える
3

ドキュメントを確認すると、「警告」が明確に書かれてい ます

「クロール スパイダーのルールを記述するときは、parse をコールバックとして使用しないでください。これは、クロール スパイダーが parse メソッド自体を使用してロジックを実装するためです。したがって、parse メソッドをオーバーライドすると、クロール スパイダーは機能しなくなります。」

確認用URL

于 2011-10-25T10:04:30.240 に答える
1

allow=(r'/アドラー/', ...

于 2009-11-27T18:48:51.187 に答える
1

「ルール」がタプルになるための最初の要素の後にカンマがありません..

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)
于 2010-12-23T07:55:13.090 に答える