我在www.example.com中有一个类pipelines.py,它将和线程发送到我的服务器的API:
class MyPipeline:
def process_item(self, item, spider):
data = {
"source_id": 'name_of_the_running_spider,
"token": "token",
"products": [dict(item)],
}
headers = {'Content-Type': 'application/json'}
url = 'http://for.example.com/my-api/'
requests.post(url=url, headers=headers, data=json.dumps(data))
return item
问题是管道每次都在一个项目("products": [dict(item)]
)下发送。是否有可能以某种方式将一个列表项目传递给**“products”**(例如[dict(item)*10]
)?如果在spider本身中,它可以使用循环和计数器进行组织,但如何通过www.example.com实现它pipeline.py
1条答案
按热度按时间vktxenjb1#
经过一些测试之后,我提出了一个可能的解决方案,通过将每个项目存储在列表中,并使用一个单独的方法来管理收集的项目数,并在列表长度达到某个阈值时自动触发请求,从而为管道添加功能,然后在pipelines
close_spider
方法中检查是否还有未发送的请求,并发送这些请求。对于蜘蛛名称,pipelines
process_item
方法接收spider的示例,因此要获取spider的name
属性,只需使用spider.name
即可。相反,如果您试图获取spider类的名称,则可以对type(spider)
执行一些regex操作,或者简单地将类名作为属性添加到spider并使其通过spider.classname
.例如:
一个月六个月一次