これは私のテストプロジェクトツリーです:このスクリーニングクローラでは何の結果も得られませんか?
├── 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
を実行したとき、私は全く結果を得ていませんでした!
私はここで何が欠けていますか?
は、出力を投稿してください... – wind85
P.S.あなたは両方のスパイダーを必要としません。 「EasySpider」だけで十分です。 'BasicSpider'は' EasySpider'までの本の一例です。読んでいただきありがとうございます:) – neverlastn
@neverlastnはい、私は知っています。私はEasySpiderが動作していない間にBasicSpiderが動作する理由(2つのファイルの 'allowed_domains'が' web'に設定されていましたが、なぜそれをドメインに変更してクロールする必要があるのか分かりませんでした)私はそれがすべてのドメインのための一般的な単語だと思った。良い本[私は友人からそれを得た、私はまだ第3章にある] :) – XO39