话不多说,直接开始,直接放上整个程序过程

1、创建工程和生成spiders就不用说了,会用scrapy的都知道。

2、items.py

class HarryItem(scrapy.Item):
# define the fields for your item here like:
img_url = scrapy.Field()
img_name = scrapy.Field()

3、pipelines.py

   

import os
from harry.settings import IMAGES_STORE as IMGS
from scrapy.pipelines.images import ImagesPipeline
from scrapy import Request
class HarryPipeline(object):
def process_item(self, item, spider):
return item
class HarryDownLoadPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for imgurl in item['img_url']:
yield Request(imgurl)
#以下代码为自定义图片名称的新增代码
# def item_completed(self, results, item, info):
# print ('******the results is********:',results)
# os.rename(IMGS + '/' + results[0][1]['path'], IMGS + '/' + item['img_name'])
# def __del__(self):
# #完成后删除full目录
# os.removedirs(IMGS + '/' + 'full')

4、settings.py

BOT_NAME = 'harry'
SPIDER_MODULES = ['harry.spiders']
NEWSPIDER_MODULE = 'harry.spiders'
ROBOTSTXT_OBEY = False
IMAGES_URLS_FIELD = "img_url" # 对应item里面设定的字段,取到图片的url
IMAGES_STORE = 'E:/harrypotter'
ITEM_PIPELINES = {
'harry.pipelines.HarryDownLoadPipeline': 300,
}

5、最主要的爬虫组件hr.py

# -*- coding: utf-8 -*-
import scrapy
from harry.items import HarryItem
from scrapy import Request class HrSpider(scrapy.Spider):
name = 'hr'
allowed_domains = ['www.ivsky.com']
sts=[]
st='http://www.ivsky.com/bizhi/harry_potter5_v3477/pic_1018'
for x in range(6,24):
if x<10:
sts.append(st+''+str(x)+'.html')
else:
sts.append(st+str(x)+'.html')
start_urls = sts def parse(self, response):
item=HarryItem()
urls=response.xpath('//div[@id="pic_con"]/div/img[@id="imgis"]/@src').extract()
    
names=response.xpath('//div[@id="pic_con"]/div/img[@id="imgis"]/@src').extract()[0].split('/')[-1]

      item['img_name']=names

      print ('links is :--','\n',urls)

        item['img_url']=urls
yield item

6、执行爬虫

  进入到工程路径,比如我的是harry这个路径中,执行 scrapy crawl hr     #hr 是我设置的爬虫名称

7、总结

  此次爬虫,有两方面的小收获。

  收获①这个网站的网页设置很奇怪,用google浏览器F12打开看到图片链接结构是div/div/a/img/@src,但用 这个结构去爬取,发现链接都是空的(这也就是我的spiders中故意设置一  行print ('links is :--','\n',urls)的原因了,可以看到爬取过程的log,图片链接有没有正常爬取到)。所以直接邮件查看网页源代码,发现了猫腻,以下两张图片做对比可以发现实际只有div/div/img/@src这个结构才能真正获取到图片链接。怀疑是网站的程序猿将tag搞错<img> 和</a>配对了,在“查看网页源代码”可以看到是这样。

图片一:F12查看的结构

图片二、右键“查看网页源代码”

  收获②

如果有些网页是类似下面数字翻页的,而且下一页中的链接不容易提取到的,那么可以用以下将要爬取的图片页面链接全部放置在start_urls这个list中
www.ivsky.com/bizhi/harry_potter5_v3477/pic_101808.html
www.ivsky.com/bizhi/harry_potter5_v3477/pic_101809.html
www.ivsky.com/bizhi/harry_potter5_v3477/pic_101811.html

class HrSpider(scrapy.Spider):
name = 'hr'
allowed_domains = ['www.ivsky.com']
sts=[]
st='http://www.ivsky.com/bizhi/harry_potter5_v3477/pic_1018'
for x in range(6,24):
if x<10:
sts.append(st+''+str(x)+'.html')
else:
sts.append(st+str(x)+'.html')
start_urls = sts

欢迎大家留言讨论,转载请注明出处。

scrapy图片-爬取哈利波特壁纸的更多相关文章

  1. 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式

    爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...

  2. scrapy之360图片爬取

    #今日目标 **scrapy之360图片爬取** 今天要爬取的是360美女图片,首先分析页面得知网页是动态加载,故需要先找到网页链接规律, 然后调用ImagesPipeline类实现图片爬取 *代码实 ...

  3. 使用scrapy框架爬取自己的博文(2)

    之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- - 显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u76 ...

  4. [Python_scrapy图片爬取下载]

    welcome to myblog Dome地址 爬取某个车站的图片 item.py 中 1.申明item 的fields class PhotoItem(scrapy.Item): # define ...

  5. scrapy版本爬取某网站,加入了ua池,ip池,不限速不封号,100个线程爬崩网站

    目录 scrapy版本爬取妹子图 关键所在下载图片 前期准备 代理ip池 UserAgent池 middlewares中间件(破解反爬) settings配置 正题 爬虫 保存下载图片 scrapy版 ...

  6. 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息

    简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...

  7. Python爬虫入门教程 26-100 知乎文章图片爬取器之二

    1. 知乎文章图片爬取器之二博客背景 昨天写了知乎文章图片爬取器的一部分代码,针对知乎问题的答案json进行了数据抓取,博客中出现了部分写死的内容,今天把那部分信息调整完毕,并且将图片下载完善到代码中 ...

  8. 如何提高scrapy的爬取效率

    提高scrapy的爬取效率 增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置 ...

  9. scrapy框架爬取笔趣阁完整版

    继续上一篇,这一次的爬取了小说内容 pipelines.py import csv class ScrapytestPipeline(object): # 爬虫文件中提取数据的方法每yield一次it ...

随机推荐

  1. 【转】NodeJS教程--基于ExpressJS框架的文件上传

    本文是翻译的一篇文章,原文地址:Handle File Uploads in Express (Node.js). 在NodeJS发展早期上传文件是一个较难操作的功能,随后出现了formidable. ...

  2. 几乎零配置产生Nuget包的库:White Tie

    通过Nuget管理器为你所需要产生Nuget包的项目安装White Tie,目前最新版本为1.3.16,VS2015下可用,VS2013应该问题也不大,VS2010就不好说了. 安装好之后直接重新生成 ...

  3. Ubuntu ndk环境变量配置

    https://blog.csdn.net/gulingfengze/article/details/70149092 用source /etc/profile,有些博客写的使用sudo gedit ...

  4. EF Database first 中,实现 多个表对应一个 实体的 查询

    1.首先 创建好 数据 库. hobby表 major 表 student 表 外键 关系如下 2. 实现将 数据库 映射到EDM中 视图如下 在VS中 生成了 3个实体类  ,对应的是 数据库中的3 ...

  5. Spring 上下文操作工具类 ContextUtils

    ContextUtils.java package com.java.config; import org.springframework.beans.BeansException; import o ...

  6. 改Chrome的User Agent,移动版网络

    理论上访问手机版或者iPad等平板电脑版的网络,应该可以剩些流量的,毕竟移动网络是经过优化压缩的,但是PC电脑如果访问移动版的网站呢?我主要使用的浏览器是Chrome,这几天也找了下Chrome下的修 ...

  7. System.TimeDate

    本篇将介绍时间类型. msdn官网:点击查看 时间辅助类:点击查看  方法:计算两个时间的时间差(年月日小时分钟),获取时间戳,时间格式转换,获取时间随机码 定义:表示时间上的一刻,通常以日期和当天的 ...

  8. windows安装配置mongodb及图形工具MongoVUE

    解压安装包到D:\Program Files\mongodb 建立数据库目录 D:\Program Files\mongodb\data 建立日志目录 D:\Program Files\mongodb ...

  9. 武者Vue

    1 - Introduction 2 - The Vue Instance 3 - Data & Methods 4 - Data Binding 5 - Events 6 - Event M ...

  10. CBCGPImage的GetSize的问题及解决方法

    BCGControlBar Pro for MFC 25.10是目前(2018-07-16)网上能够找到的最新能够使用的版本,我配合Visual Studio 2010使用.在单文档MFC程序的视图中 ...