使用scrapy爬取整个网站的图片数据。并且使用 CrawlerProcess 启动。 1 # -*- coding: utf-8 -* 2 import scrapy 3 import requests

 from bs4 import BeautifulSoup

 from meinr.items import MeinrItem

 class Meinr1Spider(scrapy.Spider):
name = 'meinr1'
# allowed_domains = ['www.baidu.com']
# start_urls = ['http://m.tupianzj.com/meinv/xiezhen/']
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
}
def num(self,url,headers): #获取网页每个分类的页数和URL格式
html = requests.get(url=url,headers=headers)
if html.status_code != 200:
return '',''
soup = BeautifulSoup(html.text,'html.parser')
nums = soup.select('#pageNum li')[3]
nums = nums.select('a')[0].attrs.get('href')
num = str(nums[:-5]).split('_')[-1]
papa = str(nums[:-5]).split('_')[:-1]
papa = '_'.join(papa)+'_'
return int(num),papa def start_requests(self):
      #这是网站的所有分类
urls = ['http://m.tupianzj.com/meinv/xiezhen/','http://m.tupianzj.com/meinv/xinggan/','http://m.tupianzj.com/meinv/guzhuang/','http://m.tupianzj.com/meinv/siwa/','http://m.tupianzj.com/meinv/chemo/','http://m.tupianzj.com/meinv/qipao/','http://m.tupianzj.com/meinv/mm/']
num = 0
for url in urls:
num,papa = self.num(url,self.headers)
for i in range(1,num):
if i != 1:
urlzz = url + papa + str(i) + '.html' #拼装每页URL
else:
urlzz = url
yield scrapy.Request(url=urlzz,headers=self.headers,callback=self.parse)
def parse(self, response):
# print(response.body)
htmllist = response.xpath('//div[@class="IndexList"]/ul[@class="IndexListult"]/li')#获取每页的图集URL和title
# print(htmllist)
for html in htmllist:
url = html.xpath('./a/@href').extract()
title = html.xpath('./a/span[1]/text()').extract()
# print(url)
# print(title)
yield scrapy.Request(url=url[0],meta={
'url':url[0],
'title':title[0]},
headers=self.headers,
callback=self.page
)
def page(self,response):
is_it = response.xpath('//div[@class="m-article"]/h1/text()').extract()
if is_it:
is_it = is_it[0].strip()
num = int(is_it[-4])
a = 0
for i in range(1,int(num)):
a += 1
url = str(response.url)[:-5] + '_' + str(i) + '.html' #拼装图集内的URL分页
yield scrapy.Request(url=url, headers=self.headers, callback=self.download, meta={
'url': response.meta.get('url'),
'title': response.meta.get('title'),
'num':a },dont_filter=True) #使用了dont_filter取消去重是因为我们需要进入第一页获取总页数 def download(self,response):
img = response.xpath("//img[@id='bigImg']/@src").extract() #获取每个页面里的img
if img:
time = MeinrItem()
time['img'] = img[0]
time['title'] = response.meta.get('title')
time['num'] = response.meta.get('num')
yield time

上面的是spider文件

import scrapy

class MeinrItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
img = scrapy.Field()
num = scrapy.Field()
pass

上面的是item文件

 import os
import requests class MeinrPipeline(object):
def open_spider(self,spider):#打开spider时启动。获取下载地址
self.path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + os.sep + 'download'
# print(self.path)
def process_item(self, item, spider):
title = item['title']
img = item['img']
num = item['num']
path = self.path + os.sep + title #将图集的title设置为每个图集的文件夹的名字
if not os.path.exists(path): #没有则创建
os.makedirs(path)
html = requests.get(url=img,headers=spider.headers).content
path = path + os.sep + str(num) + '.jpg' #这是每个图集内的图片是第几页
with open(path,'wb')as f:
f.write(html)
return item

这上面是管道文件

 import datetime,os
time = datetime.datetime.now().strftime('%Y_%m_%H_%M_%S')
LOG_FILE = 'logs'+ os.sep +str(time) + '_' + "meinr.log"
LOG_LEVEL = "INFO"

这是在setting里面的,设置的日志信息和保存的位置以及消息的级别

 # -*- coding: utf-8 -*-
import sys,datetime
import os from meinr.spiders.meinr1 import Meinr1Spider
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings process = CrawlerProcess(get_project_settings()) #这里获取spider里面的setting
process.crawl(Meinr1Spider) #使用crawl启动Meinr1Spider爬虫
12 process.start() #开始运行

这是spider的启动文件

文件格式就是这样

Git地址 :https://github.com/18370652038/meinr.git

scrapy爬取美女图片的更多相关文章

  1. Scrapy爬取美女图片 (原创)

    有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...

  2. Scrapy爬取美女图片第三集 代理ip(上) (原创)

    首先说一声,让大家久等了.本来打算那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复 ...

  3. Scrapy爬取美女图片第四集 突破反爬虫(上)

     本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...

  4. Scrapy爬取美女图片续集 (原创)

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用.(我的新书< ...

  5. Scrapy爬取美女图片第三集 代理ip(下)

    这是我的公众号获取原创保护的首篇文章,原创的肯定将支持我继续前行.现在写这篇文章的时间是晚上11:30,写完就回寝室休息了,希望更多的朋友与我一起同行(当然需要一个善良的妹子的救济).(我的新书< ...

  6. android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码

    Android精选源码 一个爬取美女图片的app Android高仿抖音 android一个可以上拉下滑的Ui效果 android用shape方式实现样式源码 一款Android上的新浪微博第三方轻量 ...

  7. Python 爬取美女图片,分目录多级存储

    最近有个需求:下载https://mm.meiji2.com/网站的图片. 所以简单研究了一下爬虫. 在此整理一下结果,一为自己记录,二给后人一些方向. 爬取结果如图:   整体研究周期 2-3 天, ...

  8. 福利贴——爬取美女图片的Java爬虫小程序代码

    自己做的一个Java爬虫小程序 废话不多说.先上图. 目录命名是用标签缩写,假设大家看得不顺眼能够等完成下载后手动改一下,比方像有强迫症的我一样... 这是挂了一个晚上下载的总大小,只是还有非常多由于 ...

  9. 1、使用Python3爬取美女图片-网站中的每日更新一栏

    此代码是根据网络上其他人的代码优化而成的, 环境准备: pip install lxml pip install bs4 pip install urllib #!/usr/bin/env pytho ...

随机推荐

  1. 使用IE11的F12开发人员工具进行网页前端性能测试

    用IE访问被测网站(我的是IE11,EDGE浏览器相同),定位到你要测试的动作所在页面或被测页面的前一页.按F12调出开发人员工具,其它的功能我就不介绍了,直接切换到性能选项卡. 根据提示按快捷键ct ...

  2. listen 75

    Hot Jupiters Smarten Search For Other Earths Scientists are looking for Earth like planets around ot ...

  3. ACM学习历程—FZU 2144 Shooting Game(计算几何 && 贪心 && 排序)

    Description Fat brother and Maze are playing a kind of special (hentai) game in the playground. (May ...

  4. Data Grip 使用--->创建数据库连接

    1.  简介 Data Grip 是一款类似于Workbench的数据库设计工具,可以用来对常用的数据管理系统(MySQL/Oracle/Postgresql...)进行操作. 2.  利用DataG ...

  5. c# namespace不能和class的name 相同

    比如namespace A, 内部Class A, 那么调用class A的方法只能通过A.A.XXX来访问. 或者说实例化一个class A,  A a = new A(); // compile ...

  6. Angular 2 ViewChild & ViewChildren

    一.ViewChild ViewChild 是属性装饰器,用来从模板视图中获取匹配的元素.视图查询在 ngAfterViewInit 钩子函数调用前完成,因此在 ngAfterViewInit 钩子函 ...

  7. DOM,date,字符串

    ECMAscript Dom doc Bom Browerwindow --窗口. location --地址栏. history --历史. document --文档. statue --任务栏& ...

  8. 【读后感1】SQL2008技术内幕- SQL逻辑查询处理

    引言观点 1. 编程语言日新月异,但是从没有人否定sql 在现代编程中的巨大作用和 持续的可利用性.SQL以对人类友好的阅读体验提供数据查询能力( 相比其他编程语言 ), 同时在各种数据库平台中,基础 ...

  9. UnityShader实例09:Stencil Buffer&Stencil Test

    http://blog.csdn.net/u011047171/article/details/46928463 Stencil Buffer&Stencil Test 在开始前先吐槽下uni ...

  10. 判断iphone 屏幕大小宏定义

    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)  #define IS_IPHONE (UI_USER_I ...