爬虫案例:图片下载器

items.py

class CoserItem(scrapy.Item):
    url = scrapy.Field()
    name = scrapy.Field()
    info = scrapy.Field()
    image_urls = scrapy.Field()
    images = scrapy.Field()

spiders/coser.py

# -*- coding: utf-8 -*-
from scrapy.selector import Selector
import scrapy
from scrapy.contrib.loader import ItemLoader
from Cosplay.items import CoserItem

class CoserSpider(scrapy.Spider):
    name = "coser"
    allowed_domains = ["bcy.net"]
    start_urls = (
        ‘http://bcy.net/cn125101‘,
        ‘http://bcy.net/cn126487‘,
        ‘http://bcy.net/cn126173‘
    )

    def parse(self, response):
        sel = Selector(response)

        for link in sel.xpath("//ul[@class=‘js-articles l-works‘]/li[@class=‘l-work--big‘]/article[@class=‘work work--second-created‘]/h2[@class=‘work__title‘]/a/@href").extract():
            link = ‘http://bcy.net%s‘ % link
            request = scrapy.Request(link, callback=self.parse_item)
            yield request

    def parse_item(self, response):
        l = ItemLoader(item=CoserItem(), response=response)
        l.add_xpath(‘name‘, "//h1[@class=‘js-post-title‘]/text()")
        l.add_xpath(‘info‘, "//div[@class=‘post__info‘]/div[@class=‘post__type post__info-group‘]/span/text()")
        urls = l.get_xpath(‘//img[@class="detail_std detail_clickable"]/@src‘)
        urls = [url.replace(‘/w650‘, ‘‘) for url in urls]
        l.add_value(‘image_urls‘, urls)
        l.add_value(‘url‘, response.url)

        return l.load_item()

pipelines.py

import requests
from Cosplay import settings
import os

class ImageDownloadPipeline(object):
    def process_item(self, item, spider):
        if ‘image_urls‘ in item:
            images = []
            dir_path = ‘%s/%s‘ % (settings.IMAGES_STORE, spider.name)

            if not os.path.exists(dir_path):
                os.makedirs(dir_path)
            for image_url in item[‘image_urls‘]:
                us = image_url.split(‘/‘)[3:]
                image_file_name = ‘_‘.join(us)
                file_path = ‘%s/%s‘ % (dir_path, image_file_name)
                images.append(file_path)
                if os.path.exists(file_path):
                    continue

                with open(file_path, ‘wb‘) as handle:
                    response = requests.get(image_url, stream=True)
                    for block in response.iter_content(1024):
                        if not block:
                            break

                        handle.write(block)

            item[‘images‘] = images
        return item

settings.py

ITEM_PIPELINES = {‘Cosplay.pipelines.ImageDownloadPipeline‘: 1}

IMAGES_STORE = ‘../Images‘

DOWNLOAD_DELAY = 0.25    # 250 ms of delay

在项目根目录下新建main.py文件,用于调试

from scrapy import cmdline
cmdline.execute(‘scrapy crawl coser‘.split())

执行程序

py2 main.py

原文地址:https://www.cnblogs.com/loaderman/p/11890355.html

时间: 2024-11-03 11:52:44

爬虫案例:图片下载器的相关文章

Python实战:美女图片下载器,海量图片任你下载

Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习Python这门语言. 本文是在前一部分Python基础之上Python实战:Python爬虫学习教程,获取电影排行榜,再次升级的Python网页爬虫实战课程. 1.项目概述. 利用XPath和requests模块进行网页抓取与分析,达到网页图片下载的效果. 抓爬图片地址:http://www.2c

Bing图片下载器(Python实现)

分享一个Python实现的Bing图片下载器.下载首页图片并保存到到当前目录.其中用到了正则库re以及Request库. 大致流程如下: 1.Request抓取首页数据 2.re正则匹配首页图片URL 3.再次使用Request下载图片数据 源码: # --*-- encoding: UTF-8 --*-- """bingloader.py下载Bing.com首页图片""" import reimport sysimport osimport r

自己动手写美女图片下载器

前言:看到标题可能会有人觉得似曾相识,没错,这篇博文的来源正是根据杨中科老师的<百度美女图片下载器开发教程.Net版>.因为我也观看了该教程,觉得很好玩,于是乎想自己独立完成一次,作为对之前基础学习内容的回顾和运用.以博文的形式和大家分享整个开发过程主要是想借此机会来重新整理下思路.锻炼下自己的表达能力.您如果对下面要用到知识点很熟悉,可忽略此文. 一.主要技术 Winform常用控件的基本使用 HttpWebRequest请求其他网站内容 Newtonsoft.Json.dll组件解析JSO

爬虫学习——网页下载器和urllib2模块

什么是网页下载器? 一.网页下载器是爬虫的核心组件 二.常用的python网页下载器有urlilib2基础模块和requests第三方插件两种 urllib2支持功能:1.支持直接url下载:2.支持向网页直接输入的数据:3.支持需要登陆网页的cookie处理:4.需要代理访问的代理处理 三.urllib2的三种下载方法 方法一.直接下载法 相应代码如下: #-*-coding:utf-8-*- #调用urllib2模块 import urllib2 #直接请求 response=urllib2

爬虫框架Scrapy之案例三图片下载器

items.py class CoserItem(scrapy.Item): url = scrapy.Field() name = scrapy.Field() info = scrapy.Field() image_urls = scrapy.Field() images = scrapy.Field() spiders/coser.py # -*- coding: utf-8 -*- from scrapy.selector import Selector import scrapy fr

scrapy学习2 爬虫中间件,下载器中间件之添加代理

中间件 注意:这些中间件都放在middleware中 下载中间件 作用 实例: 代理被封,添加代理 方式一:内置添加代理功能 import os # -*- coding: utf-8 -*- import os import scrapy from scrapy.http import Request class ChoutiSpider(scrapy.Spider): name = 'chouti' allowed_domains = ['chouti.com'] start_urls =

图片下载器类

/** * Created by Administrator on 2017/3/24. * 图片异步下载类 */ public class AsyncImageLoader { private HashMap<String, SoftReference<Drawable>> imageCache; public AsyncImageLoader() { imageCache = new HashMap<String, SoftReference<Drawable>

图片下载器

import reimport urllib.request class Picture(object): def run(self): # 定义变量url 获取要下载图片的地址 url = "http://www.txt100.com/bbrvtwyhknv/85774146.html" response = urllib.request.urlopen(url).read().decode('utf-8') imglist = re.findall('src="(.+?\

爬虫5 html下载器 html_downloader.py

#coding:utf8 import urllib2 __author__ = 'wang' class HtmlDownloader(object): def download(self, url): if url is None: return None response = urllib2.urlopen(url) if response.getcode() != 200: return None return response.read()