-1

これらのサイトからいくつかのWebサイトといくつかの画像を取得する必要があります。画像が*.jpgの場合、問題はありませんが、これらのサイトにも* .svg画像があり、これらが必要です。

誰かがこれを以前にやったことがありますか?

エラーのあるシェル出力は次のとおりです。

2013-01-18 14:44:10-0600 [crawler] DEBUG: Image (downloaded): Downloaded image from <GET http://page/image.svg> referred in <None>
2013-01-18 14:44:10-0600 [crawler] Unhandled Error

Traceback (most recent call last):
File "/virtualenvs/asd/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 576, in _runCallbacks
        current.result = callback(current.result, *args, **kw)
File "/virtualenvs/asd/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 381, in callback
        self._startRunCallbacks(result)
File "/virtualenvs/asd/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 489, in _startRunCallbacks
        self._runCallbacks()
File "/virtualenvs/asd/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 576, in _runCallbacks
        current.result = callback(current.result, *args, **kw)
    --- <exception caught here> ---
File "/virtualenvs/asd/local/lib/python2.7/site-packages/Scrapy-0.16.3-py2.7.egg/scrapy/contrib/pipeline/images.py", line 199, in media_downloaded
        checksum = self.image_downloaded(response, request, info)
File "/virtualenvs/asd/local/lib/python2.7/site-packages/Scrapy-0.16.3-py2.7.egg/scrapy/contrib/pipeline/images.py", line 252, in image_downloaded
        for key, image, buf in self.get_images(response, request, info):
File "/virtualenvs/asd/local/lib/python2.7/site-packages/Scrapy-0.16.3-py2.7.egg/scrapy/contrib/pipeline/images.py", line 261, in get_images
        orig_image = Image.open(StringIO(response.body))
File "/virtualenvs/asd/local/lib/python2.7/site-packages/PIL/Image.py", line 1980, in open
        raise IOError("cannot identify image file")
    exceptions.IOError: cannot identify image file

ありがとう !(私の英語でごめんなさい)

4

1 に答える 1

0

それが他の誰かを助けるなら、私はこれを次のように解決することができます

item.pyで、次の属性をオブジェクトに追加します。

      body = Field()
      url = Field()

スパイダー(def parse()内)に、次のコードを追加します。

import urllib2 

(...)

    #select each img url
    relative_urls = info.select('tr/td/a[@class="image"]/img/@src').extract()

    for relative_url in relative_urls:
        #static url
        relative_url = relative_url.split("svg")[0][2:-1]+".svg"
        relative_url = ''.join(relative_url.split("/thumb")).strip()

        relative_url = "http://"+relative_url

        asd = urllib2.urlopen(relative_url)
        data = asd.read()
        with open("%s/%s" % ('/home/user/virtualenvs', img.svg), "wb") as code:
            code.write(data)

わたしにはできる

(明らかに、スパイダーとパイプラインの間でコードを分離できます)

于 2013-01-23T14:05:53.360 に答える