使用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. 集训Day9

    又是不想学化学但元气满满的一天呢qwq 今天又有新的故事发生那就是! bzoj2150 最小流 每个点拆成$a_x$和$a_y$ $S$->$a_x$容量为1 $a_y$->$T$容量为1 ...

  2. P2042 [NOI2005]维护数列[splay或非旋treap·毒瘤题]

    P2042 [NOI2005]维护数列 数列区间和,最大子列和(必须不为空),支持翻转.修改值.插入删除. 练码力的题,很毒瘤.个人因为太菜了,对splay极其生疏,犯了大量错误,在此记录,望以后一定 ...

  3. HDU 1166 敌兵布阵 (线段树单点修改和区间和查询)

    Input 第一行一个整数T,表示有T组数据.每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1 ...

  4. 运维程序】简单的命令控制器(支持定时命令执行、重复定时任务命令和进程管理,开发这个小程序主要是为了方便管理服务进程)【个人github项目】

    一.前言: command-controller 一个运维程序,简单的命令控制器(支持定时命令执行和重复定时命令,开发这个程序主要是为了方便管理服务进程) 本来是要用python做的,但是之前做ffm ...

  5. poj1149PIGS——网络最大流

    题目:http://poj.org/problem?id=1149 不把猪圈当做点,而把顾客当作点,把猪当作边权(流量): 因为猪圈中的猪可流动,所以共用一个猪圈的人互相连边: 注意应该连成链的形式, ...

  6. 获取iOS应用中当前处于Activity状态的ViewController

    转自:http://blog.csdn.net/lixuwen521/article/details/41447507 // 获取当前处于activity状态的view controller - (U ...

  7. hibernate学习五 Hibernate补充

    1  MiddleGenIDE可以生成映射类和映射文件. 2

  8. DAL 层引用 System.Net.Http ,引发的一阵心慌

    快下班的时候 代码data 数据层编译失败,引起整个解决方案全部失败:其他同事虽然vs 版本不同,但是都能编译通过:考虑到今天更改过vs 的设置,把今天更改的设置全部都恢复,结果还是不行.最后直接恢复 ...

  9. JavaScript高级程序设计学习笔记第三章--基本概念

    一.标识符: 1.区分大小写 2.命名规则: 第一个字符必须是一个字母.下划线(_)或一个美元符号($) 其他字符可以是字母.下划线.美元符号或数字 标识符中的字母也可以包含扩展的 ASCII 或 U ...

  10. C# 清除cookies

    不同的浏览器会把cookie文件保存在不同的地方 以下是C# WebBrowser控件cookies的存放路径 C:\Users\{你的帐号名}\AppData\Local\Microsoft\Win ...