scrapy图片-爬取哈利波特壁纸
话不多说,直接开始,直接放上整个程序过程
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图片-爬取哈利波特壁纸的更多相关文章
- 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式
爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...
- scrapy之360图片爬取
#今日目标 **scrapy之360图片爬取** 今天要爬取的是360美女图片,首先分析页面得知网页是动态加载,故需要先找到网页链接规律, 然后调用ImagesPipeline类实现图片爬取 *代码实 ...
- 使用scrapy框架爬取自己的博文(2)
之前写了一篇用scrapy框架爬取自己博文的博客,后来发现对于中文的处理一直有问题- - 显示的时候 [u'python\u4e0b\u722c\u67d0\u4e2a\u7f51\u9875\u76 ...
- [Python_scrapy图片爬取下载]
welcome to myblog Dome地址 爬取某个车站的图片 item.py 中 1.申明item 的fields class PhotoItem(scrapy.Item): # define ...
- scrapy版本爬取某网站,加入了ua池,ip池,不限速不封号,100个线程爬崩网站
目录 scrapy版本爬取妹子图 关键所在下载图片 前期准备 代理ip池 UserAgent池 middlewares中间件(破解反爬) settings配置 正题 爬虫 保存下载图片 scrapy版 ...
- 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息
简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 简单的scrapy实战:爬取腾讯招聘北京地区的相关招聘信息 系统环境:Fedora22(昨天已安装scrapy环境) 爬取的开始URL:ht ...
- Python爬虫入门教程 26-100 知乎文章图片爬取器之二
1. 知乎文章图片爬取器之二博客背景 昨天写了知乎文章图片爬取器的一部分代码,针对知乎问题的答案json进行了数据抓取,博客中出现了部分写死的内容,今天把那部分信息调整完毕,并且将图片下载完善到代码中 ...
- 如何提高scrapy的爬取效率
提高scrapy的爬取效率 增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置 ...
- scrapy框架爬取笔趣阁完整版
继续上一篇,这一次的爬取了小说内容 pipelines.py import csv class ScrapytestPipeline(object): # 爬虫文件中提取数据的方法每yield一次it ...
随机推荐
- JSON对象与XML相互转换工具类
依赖jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId ...
- 整合ssm集成框架
第一步:配置pom.xml 该代码放在<dependencies>里面 <!--spring 所需要的jar包 web.aop.jdbc.webmvc--> <!--1. ...
- Siamese Network
摘抄自caffe github的issue697 Siamese nets are supervised models for metric learning [1]. [1] S. Chopra, ...
- MySQL工作经验
以下是根据工作中遇到各种场景用到的一些Mysql用法,比较实用,基本是语法之外的一些东西. 修改账户密码 1.打开Mysql控制台,输入原密码: 2.输入以下语法:mysql> set pass ...
- MySQL中事物的详解
1. 事物的定义及特性 事务是一组操作数据库的SQL语句组成的工作单元,该工作单元中所有操作要么同时成功,要么同时失败.事物有如下四个特性,ACID简称“酸性”. 1)原子性:工作单元中所有的操作要么 ...
- 红帽CentOS7 密码破解
1.在启动的时候按住方向键停留在内核选项页面,在内核选项出按e键 2.进入到另一个页面后,寻找到以linux16开头的地方,按end到行后,输入空格,然后输入rd.break console=tty0 ...
- openldap完整版本搭建记录
文档信息 目 的:搭建一套完整的OpenLDAP系统,实现账号的统一管理. 1:OpenLDAP服务端的搭建 ...
- ES6笔记01-声明变量
ES6只有六种声明变量的方法:var命令和function命令,let和const命令,import命令和class命令.所以,ES6一共有6种声明变量的方法. const声明一个只读的常量.一旦声明 ...
- Shell学习——终端打印
1.echo1.1.默认情况下,echo在每次调用后会添加一个换行符1.2.待打印的内容,可以用单引号.双引号或者直接打印,不同的方式,有各自的限制1.2.1.使用不带引号的echo时,没法打印分好( ...
- Python学习之set集合
set集合以{}保存一组可迭代对象,如列表,字符串,set集合本身.集合内的元素若有重复的,将自动去除重复元素 a=set([1,2,3]) print(a) b=set('hello python' ...