2016-06-18 2 views
1

これは私のテストプロジェクトツリーです:このスクリーニングクローラでは何の結果も得られませんか?

├── test11 
│   ├── __init__.py 
│   ├── items.py 
│   ├── pipelines.py 
│   ├── settings.py 
│   └── spiders 
│    ├── __init__.py 
│    ├── basic.py 
│    ├── easy.py 
├── scrapy.cfg 

私が持っているitems.pyファイルで:

scrapy.itemインポートアイテムから、フィールド

class test11Item(Item): 

    name = Field() 
    price = Field() 

私が持っているeasy.pyファイルで:

import scrapy 
import urlparse 
from scrapy.loader import ItemLoader 
from scrapy.loader.processors import MapCompose, Join 
from scrapy.linkextractors import LinkExtractor 
from scrapy.spiders import CrawlSpider, Rule 
from test11.items import Test11Item 


class EasySpider(CrawlSpider): 
    name = 'easy' 
    allowed_domains = ['web'] 

    start_urls = ['https://www.amazon.cn/b?ie=UTF8&node=2127529051'] 

    rules = (
      Rule(SgmlLinkExtractor(restrict_xpaths='//*[@id="pagnNextLink"]')), 
      Rule(SgmlLinkExtractor(restrict_xpaths='//*[contains(@class,"s-access-detail-page")]'), 
       callback='parse_item') 
    ) 

    def parse_item(self, response): 
     l = ItemLoader(item = Test11Item(), response = response) 

     l.add_xpath('name', '//*[@id="productTitle"]/text()', MapCompose(unicode.strip)) 
     l.add_xpath('//*[@id="priceblock_ourprice"]/text()', MapCompose(lambda i: i.replace(',', ''), float), re='[,.0-9]+') 

     return l.load_item() 

私が持っているファイル:私はbasicクモ(scrapy crawl basic)を実行すると

import scrapy 
import urlparse 
from scrapy.loader import ItemLoader 
from scrapy.loader.processors import MapCompose, Join 
from scrapy.linkextractors import LinkExtractor 
from scrapy.spiders import CrawlSpider, Rule 
from test11.items import Test11Item 

class BasicSpider(scrapy.Spider): 
    name = 'basic' 
    allowed_domains = ['web'] 

    start_urls = ['https://www.amazon.cn/b?ie=UTF8&node=2127529051'] 

    def parse(self, response): 
     l = ItemLoader(item = Test11Item(), response = response) 

     l.add_xpath('name', '//*[@id="productTitle"]/text()', MapCompose(unicode.strip)) 
     l.add_xpath('//*[@id="priceblock_ourprice"]/text()', MapCompose(lambda i: i.replace(',', ''), float), re='[,.0-9]+') 

     return l.load_item() 

、私は私が望む結果を得ます。しかし、私がeasyスパイダー、scrapy crawl easyを実行したとき、私は全く結果を得ていませんでした!

私はここで何が欠けていますか?

+0

は、出力を投稿してください... – wind85

+1

P.S.あなたは両方のスパイダーを必要としません。 「EasySpider」だけで十分です。 'BasicSpider'は' EasySpider'ま​​での本の一例です。読んでいただきありがとうございます:) – neverlastn

+0

@neverlastnはい、私は知っています。私はEasySpiderが動作していない間にBasicSpiderが動作する理由(2つのファイルの 'allowed_domains'が' web'に設定されていましたが、なぜそれをドメインに変更してクロールする必要があるのか​​分かりませんでした)私はそれがすべてのドメインのための一般的な単語だと思った。良い本[私は友人からそれを得た、私はまだ第3章にある] :) – XO39

答えて

2

あなただけの適切allowed_domainsを設定する必要があります。

allowed_domains = ['amazon.cn'] 
+0

私はそれを逃した方法を知らない!あなたは命の恩人です。 – XO39

関連する問題