2016-07-01 6 views
0

私のCrawlSpiderがHTMLコードの相対リンクを取得して処理できない理由がわかりません。クモの実行LinkExtractorで許可されているページがクロールされていないページをスキャンしていません

scrapy crawl domain_spider -a url="https://djangosnippets.org/snippets/?page=15" -s ROBOTSTXT_OBEY=0 -s AUTOTHROTTLE_ENABLED=0

と絶対に、リスト内のページ番号付きページをクロールすることを拒否:

以下

は、私はそうのように、コマンドラインからいくつかのparamsを渡すことができますするcawlspiderです。 HTMLは次のようになります。

<a href="?page=5">&lt; Previous 20</a> 

私は-a allowed="page="ようcommansからのparamsに渡す場合、それはピックアップ2より多くのページをしますが、それはまだ継続を拒否しました。

誰も私のコードで問題を見つけることができますか?

マイCrawlSpider

def __init__(self, url=None, category='default', allowed=None, denied=None, single_page=False, **kwargs): 

    self.category = category 

    if allowed == '': 
     allowed = None 

    if denied == '': 
     denied = None 

    if single_page is not False and single_page != '': 
     denied = '.*' 

    self.start_urls = ['{}'.format(url)] 
    self.allowed_domains = [urlparse(url).netloc] 
    self.domain = urlparse(url).netloc 
    self.rules = (
     Rule(LinkExtractor(allow=allowed, deny=denied, unique=True), callback='parse_page'), 
    ) 

    super(DomainSpider, self).__init__(**kwargs) 

答えて

0

OK、私は、私は自分のためにこんなに早く、これを答えることができたうれしいです。

ルール付きのCrawlSpiderを使用していて、コールバックを定義している場合は、ルールにfollow=Trueを追加してスパイダーページを続行する必要があります。それ以外の場合は、コールバックからのリクエストがyield必要になります。したがって、CrawlSpiderがリンクをたどるようにする修正の前/後は以下のとおりです。

Rule( 
    LinkExtractor(allow=allowed, deny=denied, unique=True), 
    callback='parse_page', 
    follow=True 
), 

Rule(
    LinkExtractor(allow=allowed, deny=denied, unique=True), 
    callback='parse_page' 
), 

関連する問題