0

私はscrapyの初心者です。画像をダウンロードするためのスパイダーを作成しようとしています。画像パイプラインを使用するには、PILをインストールするだけで十分ですか?私のPILは
/usr/lib/python2.7/dist-packages/PILにあります。

Scrapyプロジェクトに含めるにはどうすればよいですか?

設定ファイル:

BOT_NAME = 'paulsmith'
BOT_VERSION = '1.0'

ITEM_PIPELINES = ['scrapy.contrib.pipeline.images.ImagesPipeline']
IMAGE_STORE = '/home/jay/Scrapy/paulsmith/images'


SPIDER_MODULES = ['paulsmith.spiders']
NEWSPIDER_MODULE = 'paulsmith.spiders'
DEFAULT_ITEM_CLASS = 'paulsmith.items.PaulsmithItem'
USER_AGENT = '%s/%s' % (BOT_NAME, BOT_VERSION)

アイテムファイル:

from scrapy.item import Item, Field

class PaulsmithItem(Item):

    image_urls=Field()  
    image = Field()
    pass

スパイダーコード

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from paulsmith.items import PaulsmithItem

class PaulSmithSpider(BaseSpider):
    name="Paul"
    allowed_domains=["http://www.paulsmith.co.uk/uk-en/shop/mens"]
    start_urls=["http://www.paulsmith.co.uk/uk-en/shop/mens/jeans"]

    def parse(self,response):
        item= PaulsmithItem()
        #open('paulsmith.html','wb').write(response.body)
        hxs=HtmlXPathSelector(response)
        #sites=hxs.select('//div[@class="category-products"]')
        item['image_urls']=hxs.select("//div[@class='category-products']//a/img/@src").extract()
        #for site in sites:
            #print site.extract()
            #image = site.select('//a/img/@src').extract()
        return item


SPIDER = PaulSmithSpider()
4

1 に答える 1

0

IMAGES_STORE = '/path/to/valid/dir' を設定していない可能性があります

さらに、次のようなカスタム イメージ パイプラインを使用してみてください。

from scrapy.contrib.pipeline.images import ImagesPipeline
from scrapy.exceptions import DropItem
from scrapy.http import Request

class MyImagesPipeline(ImagesPipeline):

    def get_media_requests(self, item, info):
        for image_url in item['image_urls']:
            yield Request(image_url)

    def item_completed(self, results, item, info):
        image_paths = [x['path'] for ok, x in results if ok]
        if not image_paths:
            raise DropItem("Item contains no images")
        item['image_paths'] = image_paths
        return item

メソッド「get_media_requests」から image_urls がリクエストされているかどうかを確認できます。

参照: http://doc.scrapy.org/en/latest/topics/images.html

于 2013-01-18T06:56:22.490 に答える