从列表中提取Scrapy以提取键或值

时间:2016-08-07 01:24:56

标签: python scrapy

我是python的新手,并且在将某些价值或密钥排除在列表之外时遇到了一些麻烦。

当我的被删除项目输出其值时,我有时会得到这样的回报。

第一个列表:

'image_urls': [u'http://www.websites.com/1.jpg',
                u'http://www.websites.com/2.jpg',
                u'http://www.websites.com/3.jpg'],

现在我通过做一个更有针对性的xpath并按数字选择元素来解决这个问题[2],但我真正的问题是这些来自刮下图像的返回

第二个清单:

'images': [{'checksum': '2efhz768djdzs76dz',
            'path': 'full/2efhz768djdzs76dz.jpg',
            'url': 'http://www.websites.com/1.jpg'},
           {'checksum': 'zadz764dhqj34dsjs',
            'path': 'full/zadz764dhqj34dsjs.jpg',
            'url': 'http://www.websites.com/2.jpg'}],

我使用sqlite3来存储我的其他已删除数据与item.get

item.get(' image_urls''&#39)

如何将值列表合并到字符串中或根据其排名来定位? (第一个清单)

如何使用item.get获取校验和,路径和网址的值? (第二个清单)

编辑:我还在寻找第二个问题的解决方案:

这是输出:

'images': [{'checksum': '2efhz768djdzs76dz',
            'path': 'full/2efhz768djdzs76dz.jpg',
            'url': 'http://www.websites.com/1.jpg'},
           {'checksum': 'zadz764dhqj34dsjs',
            'path': 'full/zadz764dhqj34dsjs.jpg',
            'url': 'http://www.websites.com/2.jpg'}],

如何让第一个或第二个校验和进入sqlite列。 我目前使用:

item.get(' scrapy-item',''),其中spracy项表示已删除项的名称,最好是在代码示例中。

2 个答案:

答案 0 :(得分:2)

根据排名定位

x['image_urls'][0]

合并字典值列表

>>> images
[{'path': 'full/2efhz768djdzs76dz.jpg', 'url': 'http://www.websites.com/1.jpg', 'checksum': '2efhz768djdzs76dz'}, {'path': 'full/zadz764dhqj34dsjs.jpg', 'url': 'http://www.websites.com/2.jpg', 'checksum': 'zadz764dhqj34dsjs'}]
>>> list(map(lambda x : x['url'] + '/' + x['path'], images))
['http://www.websites.com/1.jpg/full/2efhz768djdzs76dz.jpg', 'http://www.websites.com/2.jpg/full/zadz764dhqj34dsjs.jpg']
>>> list(map(lambda x : x['checksum'], images))
['2efhz768djdzs76dz', 'zadz764dhqj34dsjs']

上面的代码应该概述如何处理数组和字典之间的转换。您也可以迭代整个数组并获取您的值,但我更喜欢lambda函数。

希望这有助于我不熟悉scrapy。因此,如果您仍然不确定某事,请发表评论。

答案 1 :(得分:2)

我不完全确定你在问什么,但看起来它与scrapy无关,删除scrapy标签可能会鼓励更多人打开你的问题并给出建议。

回到你的问题,即使这个解决方案不是最佳的,根据我对你的问题的理解,它可能会给你你想要的东西:

websites_urls=[]
checksums=[]
paths=[]
whole_item=[]
for image_url in item.get('image_urls'):
    for image in item.get('images'):
        if image_url==image['url']:
            websites_urls.append(image['url'])
            checksums.append(image['checksum'])
            paths.append(image['path'])
            whole_item.append(image)
            break