2

私はこのコードを持っています

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

これは BaseSpider からサブクラス化されたスパイダーです。このベーススパイダーは私に悪夢を与えています

def parse(self, response):

    hxs = HtmlXPathSelector(response)
    sites = hxs.select('//strong[@class="genmed"]')
    items = []


    for site in sites[:5]:

        item = PanduItem()
        item['username'] = site.select('dl/dd/h2/a').select("string()").extract()
        item['number_posts'] = site.select('dl/dd/h2/em').select("string()").extract()
        item['profile_link'] = site.select('a/@href').extract()



        request =  Request("http://www.example/profile.php?mode=viewprofile&u=5",
        callback = self.parseUserProfile)
        request.meta['item'] = item
        return request

 def parseUserProfile(self, response):

        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//div[@id="current')
        myurl = sites[0].select('img/@src').extract()

        item = response.meta['item']

        image_absolute_url = urljoin(response.url, myurl[0].strip())
        item['image_urls'] = [image_absolute_url]

        return item

これは私が得ているエラーです。私は見つけることができません。アイテムを取得しているように見えますが、よくわかりません

ERROR

File "/app_crawler/crawler/pipelines.py", line 9, in get_media_requests
            for image_url in item['image_urls']:
        exceptions.TypeError: 'NoneType' object has no attribute '__getitem__'
4

3 に答える 3

2

Pipelines.py にメソッドがありません。このファイルには 3 つのメソッドが含まれています。

  • 処理項目
  • get_media_requests
  • item_completed

item_completed メソッドは、指定されたパスへの画像の保存を処理するメソッドです。このパスは、以下のように settings.py で設定されます。

ITEM_PIPELINES = ['scrapy.contrib.pipeline.images.ImagesPipeline']
IMAGES_STORE = '/your/path/here'

上記の settings.py には、imagepipeline を有効にする行も含まれています。

できる限り理解できる最善の方法で説明しようとしました。詳細については、公式のスクレイピードキュメントを参照してください。

于 2013-07-14T13:03:49.233 に答える
0

また、IMAGES_STORE 設定を、ダウンロードした画像の保存に使用される有効なディレクトリに設定します。そうしないと、パイプラインを ITEM_PIPELINES 設定に含めても、パイプラインは無効のままになります。

例えば:

IMAGES_STORE = '/path/to/valid/dir'
于 2013-01-22T13:56:11.217 に答える
0

うーん。どこにも追加itemしてitemsいません (ただし、ドキュメントのサンプル コードも追加を行っていないため、間違ったツリーを吠えている可能性があります)。

そのように追加してみて、parse(self, response)これで問題が解決するかどうかを確認してください。

for site in sites:
    item = PanduItem()
    item['username'] = site.select('dl/dd/h2/a').select("string()").extract()
    item['number_posts'] = site.select('dl/dd/h2/em').select("string()").extract()
    item['profile_link'] = site.select('a/@href').extract()

    items.append(item)
于 2012-12-14T16:30:38.027 に答える