2016-07-15 6 views
0

のためにあなたを求めているし、可能な場合は、タイトル情報、説明、画像や曲用を抽出するために、各製品を可決しました。私は電子商取引</p> <p>クロールサイトから製品を抽出しようとする私のクモscrapy

しかし、私のスパイダーは動作しません。

CrawlSpider documentationで警告ボックスがあります:

import smtplib 
import urlparse 

from scrapy import signals 
from scrapy.http import Request 
from scrapy.loader import ItemLoader 
from scrapy.spiders import CrawlSpider 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.selector import HtmlXPathSelector 
from w3lib.html import replace_escape_chars, remove_tags 
from scrapy.loader.processors import Compose, MapCompose 

from emmiScraper.items import EmmiscraperItem 


class EmmiSpider(CrawlSpider): 
    name = 'emi' 
    allowed_domains = ['adns-grossiste.fr'] 
    start_urls = ['http://adns-grossiste.fr/95-joyetech'] 


    rules = (
     Rule(SgmlLinkExtractor(allow=(), restrict_xpaths=()), callback="parse", follow= True), 
) 

    def parse(self, response): 
     """Yields url for every item currently available on the site, and 
      transports every product name to parse_item method. 

     @url http://emmi.rs/konfigurator /proizvodi.10.html?advanced_search=1&productTitle=&x=0&y=0 
    @scrapes urls products 

    """ 
    urls = response.xpath('//*[@id="center_column"]/ul/li/div/div[2] /h5/a/@href').extract() 
    products = response.xpath('//*[@id="center_column"]/ul/li/div/div[2]/h5/a/text()').extract() 

    for url, product in zip(urls, products): 
     yield Request(urlparse.urljoin(response.url, url), 
         callback=self.parse_item, 
         meta={'product': product} 
        ) 

def parse_item(self, response): 
     """Returns fields: url_of_item, product, img_url, description, and price.""" 

    l = ItemLoader(item=EmmiscraperItem(), response=response) 
    l.default_output_processor = MapCompose(lambda v: v.strip(), replace_escape_chars) 

    l.add_value('url_of_item', response.url) 
    l.add_value('product', response.meta['product']) 
    l.add_xpath('img_url', '//*[@id="bigpic"]/@src') 
    l.add_xpath('description', '//*[@id="short_description_content"]/p[1]/span/text()') 
    l.add_xpath('price', '//*[@id="our_price_display"]/text()') 

    return l.load_item() 
+3

* "...私のスパイダーは動作しません..." * - あなたの問題がより具体的になってください。 – Filburt

+0

あなたの返信ありがとうございました スクリプトは部分を削るためにうまくいきましたが、私はすべてのサイトをクロールできるようにルールを追加しましたが、それ以上機能しています。 –

答えて

0

は、これは本当にscrapyよくあるご質問のようです。それは言う:

をクロールスパイダーのルールを記述する場合は、コールバックとして解析を使用しないよう、 CrawlSpiderはそのロジックを実装するために、解析方法自体を使用しているため。 したがって、解析メソッドをオーバーライドすると、クロールスパイダーはもはや になりません。コールバックとして 解析を使用するため、コードが期待通りに機能しない可能性があります。

パーズをコールバックとして使用するため、コードが期待どおりに機能しない可能性があります。

関連する問題