请稍等 ...
×

采纳答案成功!

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

srcary下载图片,封面及详细页图片分开下载,如何使用默认下载组件

老师,还有个小问题,如下
scrapy爬取网站的时候,网站一般会有封面图片跟详细内容图片,如何能分2个字段入库,并下载,我按我们教程来,有一个折中办法就是将获取的字段都放在一个字段中,如下面这样写:

    images = response.meta.get("image","")
    pics = response.xpath("//div[@class='swiper-wrapper']//img/@src").extract()
    pics.append(images)
    item_loader.add_value("pics", pics) # 获取图集

问题来了,这样写不够简洁也不方便后期维护,这个第一,第二是pipelines.py中配置下面这样才能获取修改后的路径,看着都觉得蛋疼(因为入库要分开2个字段,方便直接发布)

    class ArticleImagePipeline(ImagesPipeline):
    def item_completed(self, results, item, info):
        if "image" in item: # 查看item是否有图片字段
            for ok, value in results: # 遍历图片字段
                image_file_path = value["path"] # 将遍历的字段赋值
            item["image"] = image_file_path # 将图片路径保存在item字典中

        if "pics" in item: # 查看item是否有图片字段
            pics_list = []
            for ok, value in results: # 遍历图片字段
                pics_file_path = value["path"] # 将遍历的字段赋值
                if pics_file_path == item["image"]:
                    pass
                else:
                    pics_list.append(pics_file_path)
            item["pics"] = ",".join(pics_list) # 将图片路径保存在item字典中
        
        return item

有什么好的办法解决,折腾了几天了,没想到更好的代码分离方法

正在回答

3回答

https://img1.sycdn.imooc.com//szimg/5f62d44b0989101c07850183.jpg ,这个代码在https://img1.sycdn.imooc.com//szimg/5f62d48a0956eff210410325.jpg这个文件中,你顺着上面的process_item中的源码找到关键源码就知道scrapy是如何处理图片的了,然后自己改一下就行了

0 回复 有任何疑惑可以回复我~
  • 提问者 慕瓜6579165 #1
    忘了采纳了,非常感谢
    回复 有任何疑惑可以回复我~ 2020-11-05 10:37:05
  • bobby 回复 提问者 慕瓜6579165 #2
    好的,加油
    回复 有任何疑惑可以回复我~ 2020-11-05 17:43:04
酷丫 2020-09-16 23:55:39

如果只是两个字段图片下载,可以同时使用FilesPipeline和ImagesPipeline来同时下载图片。 我的需求是三个字段图片,列表图,缩略图,文章图。就只能按你这种全部塞一个字段里,然后判断。希望bobble老师能出一个视频同时爬三个图片字段的。

0 回复 有任何疑惑可以回复我~
  • bobby #1
    这个问题, 之前有个同学的提问里我详细回复过,主要是给他指明了这个地方的源码应该看哪里, 你只要知道这个图片下载的函数执行过程就知道如何修改了。
    回复 有任何疑惑可以回复我~ 2020-09-17 11:12:04
bobby 2020-09-13 18:48:09
  1. 分析源码即可知道

    ImagesPipeline这个类的源码中有两个方法可以改

    https://img1.sycdn.imooc.com//szimg/5f5df84109bd8cb608960214.jpg

    这里你得知道item_completed的调用时机,你可以继续往上找ImagesPipeline的继承类,一直往上找你在第二层会找到MediaPipeline你会发现这也是一个pipeline会有一个process_item方法,源码如下:

    https://img1.sycdn.imooc.com//szimg/5f5df8c109d4543f09200200.jpg

    这几处源码你看懂了就知道图片现在是如何完成的了,你就可以重点看看你自己如何覆盖哪几个方法为你服务了

0 回复 有任何疑惑可以回复我~
  • 提问者 慕瓜6579165 #1
    谢谢,还是得多琢磨下源码
    回复 有任何疑惑可以回复我~ 2020-09-14 16:46:48
  • bobby 回复 提问者 慕瓜6579165 #2
    好的,当你的需求过于定制化的时候 就一定要懂得看源码
    回复 有任何疑惑可以回复我~ 2020-09-16 01:11:37
  • 酷丫 回复 bobby #3
    希望bobble老师能出一个视频同时爬三个图片字段的。网上实在搜不到了。
    回复 有任何疑惑可以回复我~ 2020-09-16 23:56:41
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信