scrapy爬取美女图片
使用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爬取美女图片的更多相关文章
- Scrapy爬取美女图片 (原创)
有半个月没有更新了,最近确实有点忙.先是华为的比赛,接着实验室又有项目,然后又学习了一些新的知识,所以没有更新文章.为了表达我的歉意,我给大家来一波福利... 今天咱们说的是爬虫框架.之前我使用pyt ...
- Scrapy爬取美女图片第三集 代理ip(上) (原创)
首先说一声,让大家久等了.本来打算那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复 ...
- Scrapy爬取美女图片第四集 突破反爬虫(上)
本周又和大家见面了,首先说一下我最近正在做和将要做的一些事情.(我的新书<Python爬虫开发与项目实战>出版了,大家可以看一下样章) 技术方面的事情:本次端午假期没有休息,正在使用fl ...
- Scrapy爬取美女图片续集 (原创)
上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,不过采取了不同的方式和代码实现,对Scrapy的功能进行更深入的运用.(我的新书< ...
- Scrapy爬取美女图片第三集 代理ip(下)
这是我的公众号获取原创保护的首篇文章,原创的肯定将支持我继续前行.现在写这篇文章的时间是晚上11:30,写完就回寝室休息了,希望更多的朋友与我一起同行(当然需要一个善良的妹子的救济).(我的新书< ...
- android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码
Android精选源码 一个爬取美女图片的app Android高仿抖音 android一个可以上拉下滑的Ui效果 android用shape方式实现样式源码 一款Android上的新浪微博第三方轻量 ...
- Python 爬取美女图片,分目录多级存储
最近有个需求:下载https://mm.meiji2.com/网站的图片. 所以简单研究了一下爬虫. 在此整理一下结果,一为自己记录,二给后人一些方向. 爬取结果如图: 整体研究周期 2-3 天, ...
- 福利贴——爬取美女图片的Java爬虫小程序代码
自己做的一个Java爬虫小程序 废话不多说.先上图. 目录命名是用标签缩写,假设大家看得不顺眼能够等完成下载后手动改一下,比方像有强迫症的我一样... 这是挂了一个晚上下载的总大小,只是还有非常多由于 ...
- 1、使用Python3爬取美女图片-网站中的每日更新一栏
此代码是根据网络上其他人的代码优化而成的, 环境准备: pip install lxml pip install bs4 pip install urllib #!/usr/bin/env pytho ...
随机推荐
- 菜鸟快速自学java00之变量类型
---恢复内容开始--- 菜鸟快速自学java00之变量类型 一.诉苦 自己成为了Java中的一只菜鸟,而且已经菜了好多天了,我为什么会这么菜?归根结底,还是觉得自己在累计知识的同时,没有做好笔记,导 ...
- java对象的初始化过程和创建对象的几种方式
1.加载父类,加载父类的静态属性和静态代码块 2.加载子类,加载子类的静态属性和静态代码块 3.初始化父类中的非静态属性并赋初值,执行父类非静态代码块,执行父类构造. 4.初始化子类中的非静态属性并赋 ...
- codeforces 706D D. Vasiliy's Multiset(trie树)
题目链接: D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input ...
- STM32中IO口的8中工作模式
该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...
- bzoj 1049: 数字序列 dp
题目大意: 给定一个长度为n的整数序列.在改变的数最小的和改变的幅度最小的前提下把它变成一个单调严格上升的序列.求改变的最小的数和这个幅度. 题解: (貌似以前考试考过这道题) 其实这道题就是两道题拼 ...
- 【Lintcode】120.Word Ladder
题目: Given two words (start and end), and a dictionary, find the length of shortest transformation se ...
- 监测GPU使用情况命令
每2秒监测一次:watch -n 2 nvidia-smi
- 基于bootsplash的嵌入式linux启动画面定制
来源: ChinaUnix博客 作者: ChinaUnix博客 发布时间:2007-01-01 16:29:00 摘 要:在基于linux的嵌入式仿真平台研发中,利用开源工具bootsplash能够定 ...
- The specified named connection is either not found in the configuration, not intended to be used
今天用EF遇到一个问题, The specified named connection is either not found in the configuration, not intended t ...
- Django简单快速实现PUT、DELETE方法
使用django的小伙伴们应该都知道我们是无法开心的处理PUT跟DELETE的 $.ajax({ url: 'XXX', type: 'PUT', dataType: 'json', data: { ...