我希望将管道中的项目保留在网址中。
我在管道
中使用此代码class XPipeline(object):
def process_item(self, item, spider):
log.msg('in SpotifylistPipeline', level=log.DEBUG)
yield FormRequest(url="http://www.example.com/additem, formdata={'title': item['title'], 'link': item['link'], 'description': item['description']})
但似乎没有发出http请求。
最后,是否有一张图解释了Scrapy从头到尾的流程?我有点迷失了,什么时候被调用。例如,如果Pipelines将项目返回给Spiders,Spiders会对这些项目做些什么?管道呼叫之后发生了什么?
非常感谢提前
Migsy
答案 0 :(得分:4)
您可以从scrapy.contrib.pipeline.media.MediaPipeline继承您的管道,并在'get_media_requests'中生成请求。响应将传递到“media_downloaded”回调中。
答案 1 :(得分:3)
为每个项目管道组件调用此方法,并且必须 要么返回一个Item(或任何后代类)对象,要么引发一个 DropItem异常。丢弃的商品不再进一步处理 管道组件。
因此,只有spider可以通过回调产生请求。 管道用于处理物品。
您最好描述一下您想要达到的目标。
是否有一个图解释了Scrapy从开始到结束的流程
例如,如果Pipelines将项目返回给Spiders
管道不会将项目返回给蜘蛛。返回的项目将传递给下一个管道。
答案 2 :(得分:1)
使用requests库可以轻松完成此操作。如果您不想使用其他库,请查看urllib2。
import requests
class XPipeline(object):
def process_item(self, item, spider):
r = requests.post("http://www.example.com/additem", data={'title': item['title'], 'link': item['link'], 'description': item['description']})
if r.status_code == 200:
return item
else:
raise DropItem("Failed to post item with title %s." % item['title'])