Scrapy 在管道中使用POST请求持久化项目
我想在管道中将项目持久化并将其发布到url 我正在管道中使用此代码Scrapy 在管道中使用POST请求持久化项目,scrapy,Scrapy,我想在管道中将项目持久化并将其发布到url 我正在管道中使用此代码 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
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请求
- 可以从管道发出http请求吗?如果不是,我必须在蜘蛛里做吗
- 我需要指定回调函数吗?如果是,哪一个
- 如果我可以进行http调用,我可以检查响应(JSON)并在一切正常时返回该项,或者如果没有保存该项,则丢弃该项吗
管道不会将项目返回到三脚架。返回的项目将被传递到下一个管道。您可以从scrapy.contrib.pipeline.media.mediapripeline继承管道,并在“get\u media\u Requests”中生成请求。响应被传递到“media_downloaded”回调中。这可以通过使用库轻松完成。如果你不想使用另一个库,那就调查一下
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'])