专栏首页钱塘小甲子的博客Scrapy之图片爬取。

Scrapy之图片爬取。

Scrapy有一个很好用的内置功能去获取图片。

首先假设我们要自己写一个获取图片的爬虫吧。那么显然,你需要的就是获取图片链接,然后写一个专门下载图片的pipline。很开心的是,scrapy其实已经给你实现好了这个pipline了,是不是很贴心呢!

好了,我们开始吧。

和一般程序员同学爬取图片动不动就是美女不同,咱们今天爬汽车。

# coding=gbk
from scrapy.spiders import Spider  
from scrapy.selector import Selector  
import scrapy
#from scrapy import log  
  
from photo.items import PhotoItem  
  
  
class photoSpider(Spider):  
    name = "photoSpider"  
    start_urls = [  
        "http://car.autohome.com.cn/pic/" 
    ]  #start url at the first page
    
    def parse(self, response): #这个是spider类中默认的方法,我们做一个重写,response就是那个html文件哦。
        item = PhotoItem() 
        sel = Selector(response)#“html”文件被转化成了一个Selector(选择器)对象哦。这个对象的好处是,可以接受xpath或者css。
        sites = sel.xpath("//img/@src").extract()#提取图片的url地址
        for siteUrl in sites: 
            print siteUrl
            item['url'] = [''+siteUrl]#特别注意,不这么处理会产生错误。
            yield item

这就是我的爬虫了,是不是很简单啊。很容易实现,获取的就是这个网页中所有的图片。特别需要我们注意的是

<span style="font-size:14px;">item['url'] = [''+siteUrl]</span>

这一句。按照道理,siteUrl就是一个图片的url了,但是我在这里把他变成了列表形式了。直接当做url会有这样的报错:

反正这里我还不是特别了解细节,看了一下官当的文档,也没有什么干货。总之记住,url的传入是一个list,而不是一个char。个人估计的原因可能是一个item的url字段如果传入的是list的话,pipline可以处理多个图片的url,效率会更高。比如我们其实可以在上面把所有的url放到一个list里面,然后只抛出一个item。

所以,记住这个错误: raise ValueError('Missing scheme in request url: %s' % self._url)

我们写完了获取图片url的爬虫之后,就要设置pipline了。之前我们都是自己写pipline,现在这个pipline是内置的,所以我们不用自己写了,直接去setting文件里面说明要用就可以了

ITEM_PIPELINES = {   'scrapy.pipelines.images.ImagesPipeline': 1}
IMAGES_URLS_FIELD = 'url'
IMAGES_STORE = r'.'

在setting文件里面,首先像申明我们自己的pipline一样进行申明。这个pipline的名称是固定的哦。以后有机会给大家介绍怎么继承这个pipline,然后去实现更多的功能。

接下来就是你的item里图片url的字段了。然后就是你要存储的文件地址。

赶紧去试一试吧。

工程的github地址:https://github.com/Luyixiao/photo/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Scrapy之探讨3个细节

    在Scrapy的框架中,其实可以有好多pipline。大家在编写pipline的时候有没有这样的一个疑问,为什么pipline函数最后要有一个语句是

    钱塘小甲子
  • 巴氏距离实例

    我们把第一张图片对应的直方图称为PsOrg,第二张很匹配的称为PsMa,第三张对应的直方图称为PsNonMa。请原谅我把c++命名习惯放到Matlab里面来了。...

    钱塘小甲子
  • sjtuLib爬虫-Scrapy

    交大的图书馆网站做的真的不好,不好。但是还是要爬。没有做防墙机制,在爬取了15万条记录之后,IP又被图书馆墙了,而且貌似整个实验室都被wall了。。。。

    钱塘小甲子
  • api特殊化请求的设计

    在我们的业务请求中,有很多时候会针对有不同时长的需求策略性设置。这里针对这个需求进行详细的展开。

    RobinsonZhang
  • Oracle大表清理truncate .. reuse storage

    a、通过上述测试,当使用reuse storage与普通方式并无明显差异 b、truncate table 是ddl操作,无法回滚 c、尽管无明显性能差...

    Leshami
  • Dubbo技术知识总结之二——注册中心

    首先需要说明的一点是,服务的暴露与注册是两个不同的概念。在Dubbo中,微服务之间的交互默认是通过Netty进行的,而服务之间的通信是基于TCP以全双工的方式进...

    剑影啸清寒
  • python爬虫学习 爬取幽默笑话网站

    这篇文章主要介绍了python爬虫爬取幽默笑话网站,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    python学习教程
  • 爬虫学习

    安装Anaconda(集成环境), 安装成功后能够提供一种基于浏览器的可视化工具 ---Jupyter.

    py3study
  • 使用代码获得Hybris Commerce里显示的产品图片

    https://<host>:9002/rest/v2/electronics/products/300938?fields=FULL

    Jerry Wang
  • scrapy爬虫标准流程

    一般我们一个小的爬虫项目,比如爬取一些文章等,直接用python的requests库,配合re模块就可以很快的完成。但是对于一些大规模的爬取,我们需要实现多线程...

    羽翰尘

扫码关注云+社区

领取腾讯云代金券