我是 python 的新手,在从列表中获取特定值或键时遇到了一些麻烦。
当我抓取的项目输出它的值(value)时,我有时会得到这样的返回。
第一个列表:
'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','')
如何将值列表合并到字符串或根据其排名定位它? (第一个列表)
以及如何使用 item.get 获取校验和、路径和 url 的值? (第二个列表)
编辑:我仍在寻找第二个问题的解决方案:
这是输出:
'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 item 表示被抓取的项目的名称,最好在代码示例中。
最佳答案
基于排名的目标
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 有所帮助。因此,如果您仍然不确定某些事情,请发表评论。
关于python - 从列表中抓取以提取键或值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38810084/