请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如何实现提供restful接口,并实现增量爬取

老师,基于scrapy,怎么实现提供restful接口给其他服务使用,并支持传参的增量爬取呢,谢谢

正在回答 回答被采纳积分+3

1回答

bobby 2019-12-12 17:47:00

scrapy本身并没有提供过多的接口给外部, 不过可以使用scrapy-redis来完成,但是逻辑需要自己写, 你可以写一个服务将不同的任务提交到redis队列中,但是队列应该如何处理需要自己去写逻辑

0 回复 有任何疑惑可以回复我~
  • 提问者 慕尼黑7546459 #1
    额,还是不太理解。
    老师,我现在的需求是这样。
    首先,会通过scrapy爬去比如豆瓣的电影数据;
    这些数据会有专门的系统来编辑运营。
    
    然后,当运营时发现库里没有某部电影,运营系统(java实现)希望通过api单独去爬去这部电影的数据。
    
    问题:scrapy是该如何提供这个api接口
    
    谢谢老师
    回复 有任何疑惑可以回复我~ 2019-12-12 21:09:50
  • bobby 回复 提问者 慕尼黑7546459 #2
    你这样描述就清楚多了,其实这个问题我并不建议你通过一个scrapy爬虫就完成这个功能。你可以这样:
    1. 原来的spider仍然完成自己的功能。 2. 你重新开一个spider,逻辑可以保持一致,但是redis的队列自己用一个新名字,这个爬虫一致运行的, 3. 你写一个api接口比如tornado或者aiohttp写都行,完成接收请求,然后把url写入到队列中,这样这个爬虫一旦有url就会立即去爬,爬取到以后写入到数据库,你当前的aiohttp交出去url以后就一直查询数据库等待是否已经入库如果已经入库了就可以返回给前端结果
    回复 有任何疑惑可以回复我~ 2019-12-15 12:14:41
  • 提问者 慕尼黑7546459 回复 bobby #3
    好的,谢谢老师。
    
    我理解一下您的思路:
    1、原来的spider仍然完成自己的功能(全量自动爬取的)
    2、通过 tornado或aiohttp 开一个 api接口,这个接口的逻辑是根据参数生成爬取的url,并发布到redis队列中,然后接着轮询查询数据库,获取数据返回给服务调用方
    3、新开一个spider(要保证一直运行),这个spider 订阅步骤2发布的消息,然后去爬取数据并入库。
    
    以上,因为我刚自学python不久,还有很多不熟悉的,我还有几个问题再麻烦老师解答下:
    1、如何让 新开的那个spider一直运行的啊
    2、通过 tornado或aiohttp 开的api接口,也是跟spider在一个scrapy项目中吗
    回复 有任何疑惑可以回复我~ 2019-12-16 11:27:54
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信