使用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. codevs 4939 欧拉函数

    传送门 4939 欧拉函数  时间限制: 1 s  空间限制: 1000 KB  题目等级 : 钻石 Diamon     题目描述 Description 输入一个数n,输出小于n且与n互素的整数个 ...

  2. php之配置redis

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. 配置说明:https://www.cnblogs.com/lucky-man/p/8359110.html ph ...

  3. Vue cli项目开启Gzip

    目录 安装 compression-webpack-plugin 更改配置文件 服务器开启gzip功能 安装 compression-webpack-plugin 建议安装v1.1.11版本,最新版本 ...

  4. OGG 进程清除、重建

    背景描述:有时候OGG进程同步出现问题,症状某些进程起不来,而且问题一时半会儿解决不了.最简单的办法是:用数据泵初始化数据,OGG进程重建. 1.查看源端.目的端的进程状态. (作者OGG进程是正常的 ...

  5. JZOJ 1667【AHOI2009】中国象棋——dp

    题目:https://jzoj.net/senior/#main/show/1667 只注重0.1.2的列有多少个,不注重它们的位置,就能记录了. #include<iostream> # ...

  6. ubuntu 18.04 设置中文输入法

    有下面几种常用选择: IBus拼音:sudo apt-get install ibus-pinyin IBUS五笔:sudo apt-get install ibus-table-wubi 谷歌拼音输 ...

  7. Flutter汇总贴

    Fluuter常遇到的问题 Flutter从入门到进阶实战携程网App_汇总贴 Flutter教程网 http://www.flutterj.com/ 第三季:https://jspang.com/p ...

  8. 使用军哥的lnmp配置虚拟主机,需要注意的是要配置hosts文件

    #使用军哥的lnmp配置虚拟主机,需要注意的是要配置hosts文件(这一点官方没有讲到)具体方法:1.修改hosts文件sudo vim /etc/hosts 2.在hosts文件中新增一行(这里类似 ...

  9. Laravel框架的一些配置

    服务器的配置 1.在apache下的配置 配置httpd-conf:php5_module.rewrite_module.Listen 配置extra/httpd-vhost:端口.站点.域名.默认首 ...

  10. Windows对象、句柄与MFC对象

    windowsmfc编程c 目录(?)[-] Windows对象句柄与MFC对象 windows对象 句柄 mfc对象 杂谈 Windows对象.句柄与MFC对象 (2009-04-28 22:11: ...