scrapy.pipeline ImagePipeline func file_path.Когда я вернусь ул - PullRequest
0 голосов
/ 13 декабря 2018

Отвечает параметр функции file_path в imagepipiline.Когда я возвращаю str напрямую, я могу успешно загрузить изображение.Если используется response.meta.get ('file_name'), загрузка завершится неудачно.Это также строка.Почему нельзя использовать переменную?

item.py -

class ImageItem(scrapy.Item):
    file_name = scrapy.Field()
    url = scrapy.Field()

test.py -

class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['www.baidu.com']
    start_urls = ['http://www.baidu.com/']
    def parse(self, response):
                image_item['file_name'] = 'yoxo.jpg'
        image_item['url'] = 'https://zmtimg.dfcfw.com/529d2d0f7a57c9135eb956b9afa1810a.em/art'
        yield image_item

pipelines.py -

class ArticleImagePipeline(ImagesPipeline):
    def file_path(self, request, response=None, info=None):
        try:
            print('response.file_name:{}'.format(response.meta.get('file_name')))
            print(type(response.meta.get('file_name')))
            print(response.meta.get('file_name'))
        except Exception as e:
            pass
        return 'hello.jpg'
    def get_media_requests(self, item, info):
        meta = {
            'file_name': item['file_name']
        }
        yield Request(url=item['url'], meta=meta)

, когда я запускаю его. Это успешно! Результаты следующие:

response.file_name:yoxo.jpg
<class 'str'>
yoxo.jpg
response.file_name:yoxo.jpg
<class 'str'>
yoxo.jpg

Но когда яиспользовать переменную в качестве возвращаемого значения, она не удалась.

def file_path(self, request, response=None, info=None):
    try:
        print('response.file_name:{}'.format(response.meta.get('file_name')))
        print(type(response.meta.get('file_name')))
        print(response.meta.get('file_name'))
    except Exception as e:
        pass
    return 'hello.jpg'

результат:

2018-12-13 22:11:39 [scrapy.core.scraper] WARNING: Dropped: Image Downloaded Failed
{'file_name': 'yoxo.jpg',
 'url': 'https://zmtimg.dfcfw.com/529d2d0f7a57c9135eb956b9afa1810a.em/art'}

Я попробовал это с помощью следующего кода.Результат пустой, почему?То же самое относится и к нормальному возврату первого ответа, написанному вне попытки: пусто

try:
    # aa = response.meta.get('file_name')
    print('response.file_name:{}'.format(response.meta.get('file_name')))
    print(type(response.meta.get('file_name')))
    print(response.meta.get('file_name'))
except Exception as e:
    logging.error(response)
    logging.error(e)
    pass
print(response.meta.get('file_name','yep'))
return 'hello.jpg'

результат:

2018-12-13 22:15:31 [root] ERROR: None
2018-12-13 22:15:31 [root] ERROR: 'NoneType' object has no attribute 'meta'
2018-12-13 22:15:31 [scrapy.core.scraper] WARNING: Dropped: Image Downloaded Failed
{'file_name': 'yoxo.jpg',
 'url': 'https://zmtimg.dfcfw.com/529d2d0f7a57c9135eb956b9afa1810a.em/art'}

почему why я не мог понять。 Большое спасибо за любую помощь ~

...