首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Scrapy Pipeline

Python Scrapy Pipeline
EN

Stack Overflow用户
提问于 2017-07-14 00:21:50
回答 2查看 61关注 0票数 0

我试图让它将每行2个抓取的项输出到第二个csv,但我似乎无法正确地格式化此行。output_urls中有许多抓取的URL,对于其中的每个URL,它应该生成一行输出以及另一个变量Urls

代码语言:javascript
复制
self.file.writelines(["%s,%s\n" % (i, j) for (i, j) in zip([item['Urls']], ["\n".join(item['output_urls'])])])

item['Urls']包含:

代码语言:javascript
复制
websiteinput

item['output_urls']包含:

代码语言:javascript
复制
website1
website2
website3
website4
website5

我在试着得到:

代码语言:javascript
复制
websiteinput, website1
websiteinput, website2
websiteinput, website3
websiteinput, website4
websiteinput, website5

它输出的是:

代码语言:javascript
复制
websiteinput, website1
website2
website3
website4
website5

有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2017-07-14 01:05:34

zip方法接受两个相同大小的iterables,并像这样连接它们:

代码语言:javascript
复制
>>> a = [1, 2, 3, 4, 5]
>>> b = [2, 2, 9, 0, 9]

>>> zip(a, b)
[
    (1, 2),
    (2, 2),
    (3, 9),
    (4, 0),
    (5, 9)
]

如果这就是你想要实现的目标

代码语言:javascript
复制
self.file.writelines(["%s, %s\n" % (i, j) for (i, j) in zip(item['Urls'],
item['output_urls']))])

可能会给你你想要的

代码语言:javascript
复制
https://www.inputurl1.com, https://www.outputurl1.com
https://www.inputurl1.com, https://www.outputurl1.com

删除join

这就是我测试你的问题的方法,我假设urlsoutput_urls都是数组,因此;

代码语言:javascript
复制
t = ["https://www.inputurl1.com", "https://www.outputurl2.com"]
k = ["https://www.inputurl3.com", "https://www.outputurl4.com"]

print(["%s, %s\n" % (i, j) for (i, j) in zip(t, k)])

我得到的输出是

代码语言:javascript
复制
['https://www.inputurl1.com, https://www.inputurl3.com\n', 
'https://www.outputurl2.com, https://www.outputurl4.com\n']
票数 1
EN

Stack Overflow用户

发布于 2017-07-20 15:56:19

如果我没理解错的话,item看起来像这样:

代码语言:javascript
复制
>>> from pprint import pprint
>>> pprint(item)
{'Urls': ['websiteinput'],
 'output_urls': ['website1', 'website2', 'website3', 'website4', 'website5']}

您可以简单地使用列表理解,如下所示:

代码语言:javascript
复制
>>> [[u, o] for u in item['Urls'] for o in item['output_urls']]
[['websiteinput', 'website1'], ['websiteinput', 'website2'], ['websiteinput', 'website3'], ['websiteinput', 'website4'], ['websiteinput', 'website5']]
>>> pprint(_)
[['websiteinput', 'website1'],
 ['websiteinput', 'website2'],
 ['websiteinput', 'website3'],
 ['websiteinput', 'website4'],
 ['websiteinput', 'website5']]

使用.writelines(),您可以执行以下操作:

代码语言:javascript
复制
self.file.writelines("%s,%s\n" % (u, o)
                       for u in item['Urls']
                         for o in item['output_urls'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45086252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档