9


1

Scrapy SgmlLinkExtractorの質問

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  (referer: )
[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)

私はここで何をしていますか?

このクモを仕上げるのを手伝ってくれるスクレイピーをうまく使った人はいますか?

お手伝いありがとう。

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

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 Answer


10


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


3


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

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


1


allow =(r '/ aadler /'、…​


1


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

rules = (Rule(SgmlLinkExtractor(allow=('/careers/n.\w+', )), callback='parse', follow=True),)