前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scrapy之图片爬取。

Scrapy之图片爬取。

作者头像
钱塘小甲子
发布2019-01-29 09:40:00
1.5K0
发布2019-01-29 09:40:00
举报

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

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

好了,我们开始吧。

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

代码语言:javascript
复制
# 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

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

代码语言:javascript
复制
<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文件里面说明要用就可以了

代码语言:javascript
复制
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/

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年06月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档