页面内list图片下载问题

来源:4-16 scrapy配置图片下载

MagicMatt

2021-09-18

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

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

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

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

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

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

写回答

1回答

bobby

2021-09-21

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

0
2
bobby
回复
MagicMatt
不会的,yield函数只有遇到return才会返回,遇到yield不会停止的
2021-09-23
共2条回复

Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课

带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎

5795 学习 · 6290 问题

查看课程