2009-11-27 28 views
9

私はSgmlLinkExtractorを動作させようとしています。治療SgmlLinkExtractorの質問

これは署名です:私はちょうどのでallow=()

を使用しています

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

、私はそう

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に置き換えて、私は1つの以上のURLを掲示させません。申し訳ありません。

答えて

10

...、=(R '/ aadler /' 許可CrawlSpiderでプライベートメソッドは、リンクをたどるために使用される。

+1

を使用すると、この行を意味してください:。。 コールバックを= 'parse' – Zeynel

+0

はい、あなたのCrawlSpiderルールでコールバック "parse"を使わないでください。 –

+0

そして 'parse'メソッドを' parse_item'に変更してください – Eduardo

1

は、あなたはそれが表示されたメソッドを "パース"。 "解析" をオーバーライドしている

+1

OK」動作しませんが、変更は何もまだのみ、最初のURLをクロールしない – Zeynel

1

あなたがドキュメントをチェックすると、「警告は」はっきり を書かれている

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

..タプルであることを「ルール」のための最初の要素の後にカンマが含まれていません"クロールスパイダールールを作成する場合、クロールスパイダーはパーズメソッド自体を使用してロジックを実装するので、コールバックとしてparseを使用しないでください。 。あなたはparseメソッドをオーバーライドするのであれば、クロールスパイダーは、もはや

url for verification