请稍等 ...
×

采纳答案成功!

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

页面内list图片下载问题

尝试着爬一些食谱类网站,
食谱:
-标题
-步骤
–步骤编号
–步骤图片
–步骤描述
-食材
–食材名
–食材用量

采集信息会以json形式存进firebase或者mongodb.

每个食谱下都会有好几个步骤描述和图片。
直接下载图片的话,会产生图片和步骤错位(有些步骤可能没有图片)
图片描述
目前的做法就是把步骤通过ItemLoader来提取解析,然后分解成步骤文字,步骤图片,步骤编号, 但是这样图片文件又不能进入ImagePipeline 进行下载

想过把步骤作为一个新的item,发送请求Request,然后回调。但是这样做会产生大量无用请求(同一页面,如有十个步骤,感觉就要发送十次请求和回调。试过用meta来把步骤传给下一个parser但是 meta传的数据和response不是一个数据类型 没法加入itemloader。) (scrapy 应该会过滤掉同一页面的请求。。。所以这个方法也不行)

想请问有没有其他比较好的方法解决这个食谱步骤极其图片的采集和存储问题。

至于ImagePipeline图片字段问题,通过官方文档介绍,外加新的ImagePipeline和对应IMAGES_URLS_FIELD。这块问题不大
图片描述

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

1回答

bobby 2021-09-21 09:57:57

我这里看的不是很明白。不过有一个前提是不要做无谓的请求因为这样既影响并发也容易被发现, 你这里说到的应该是想分步骤去获取一个食谱把, 如果能一次请求完成就尽量一次请求完成, 至于担心图片和item和步骤时间的关系很好解决,你可以单独只yield一个item,这个item里面只记录图片的url,食谱的id和步骤的id这些对应关系你可以在解析页面的时候获取到的,这样你一个parse方法中可以yield多个图片的item,不是说一定要把图片放在同一个item中,如果是多个item这样你就可以对应起来了,很容易解决的

0 回复 有任何疑惑可以回复我~
  • 提问者 MagicMatt #1
    大致明白了 一直以为yield 就等于return 会中断function... 谢谢bobby老师
    回复 有任何疑惑可以回复我~ 2021-09-22 05:14:39
  • bobby 回复 提问者 MagicMatt #2
    不会的,yield函数只有遇到return才会返回,遇到yield不会停止的
    回复 有任何疑惑可以回复我~ 2021-09-23 15:50:38
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信