11.5. 下载图片

简介:

创建项目

		
neo@MacBook-Pro ~/Documents % scrapy startproject photo			
		
		
		
neo@MacBook-Pro ~/Documents % cd photo
		
		

安装依赖库

		
neo@MacBook-Pro ~/Documents/photo % pip3 install image		
		
		

创建爬虫

		
neo@MacBook-Pro ~/Documents/photo % scrapy genspider jiandan jandan.net			
		
		

11.5.1. 配置 settings.py

忽略 robots.txt 规则

			
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
			
			

配置图片保存路径与缩图

			
#图片保存路径
IMAGES_STORE='/tmp/photo'
#DOWNLOAD_DELAY = 0.25
#缩略图的尺寸,设置这个值就会产生缩略图
IMAGES_THUMBS = {
    'small': (50, 50),
    'big': (200, 200),
}				
			
			

11.5.2. 修改 pipelines.py 文件

加入 process_item()与 item_completed() 方法

注意:PhotoPipeline(ImagesPipeline) 需要继承 ImagesPipeline

			
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

import scrapy
from scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItem

class PhotoPipeline(ImagesPipeline):
    # def process_item(self, item, spider):
        # return item
    def get_media_requests(self, item, info):
        for image_url in item['image_urls']:
            yield scrapy.http.Request('http:'+image_url)

    def item_completed(self, results, item, info):
        image_paths = [x['path'] for ok, x in results if ok]
        if not image_paths:
            raise DropItem("Item contains no images")
        item['image_paths'] = image_paths
        return item
			
			

11.5.3. 编辑 items.py

忽略 robots.txt 规则

			
# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class PhotoItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    #图片的链接
    image_urls = scrapy.Field()
    images = scrapy.Field()
    image_paths = scrapy.Field()
    pass
			
			

11.5.4. Spider 爬虫文件

			
# -*- coding: utf-8 -*-
import scrapy
from scrapy.loader import ItemLoader
from photo.items import PhotoItem

class JiandanSpider(scrapy.Spider):
    name = 'jiandan'
    # allowed_domains = ['jandan.net']
    allowed_domains = [] 
    start_urls = ['http://jandan.net/ooxx']

    def parse(self, response):
       
        l = ItemLoader(item=PhotoItem(), response=response)
        l.add_xpath('image_urls','//img//@src' )
        yield l.load_item()

        next_page = response.xpath('//a[@class="previous-comment-page"]//@href').extract_first() #翻页
        if next_page:
            yield response.follow(next_page,self.parse)
        pass
    def parse_page(self, response):
        l = ItemLoader(item=PhotoItem(), response=response)
        l.add_xpath('image_urls','//img//@src' )
        return l.load_item()				
			
			





原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

目录
相关文章
|
5月前
|
JavaScript
js 下载文件(根据URL下载文件,根据URL下载图片)
js 下载文件(根据URL下载文件,根据URL下载图片)
591 0
|
7月前
uniapp下载图片到本地
uniapp下载图片到本地
99 0
|
7月前
|
数据采集 Python
scrapy异步下载图片
scrapy异步下载图片
75 0
scrapy异步下载图片
|
7月前
爬取网络图片
爬取网络图片
96 0
|
移动开发 前端开发 HTML5
前端下载图片的N种方法
前端下载图片的N种方法
429 0
前端下载图片的N种方法
|
数据采集 Python
图片下载
爬虫系列文章
198 0
仿比心源码,保存图片到系统相册
仿比心源码,保存图片到系统相册
259 0
|
C#
C#之通过图片地址下载图片
因为项目上需要加载在线卫星云图,因此写了这个功能来把卫星云图下载的本地,在这里记录一下: string imageUrl=“http://image.nmc.cn/product/2018/08/06/WXCL/SEVP_NSMC_WXCL_ASC_E99_ACHN_LNO_PY_20180806051500000.
2217 0
fswebcam 获取图片
/************************************************************************* * fswebcam 获取图片 * 说明: * 通过fswebcam获取图片比通过FFmpeg简单一点。
1260 0