实现这个是因为之前在谋个公众号里面看到一篇文章,关注了也拿不到源代码 ,所以就自己写了一个爬取这个网站图片的功能。个人觉得这个网站的图片就一般吧。

开始

环境,py3, win, linux下运行都是没有问题的

前期先创建好自己的爬虫啦
配置好配置文件

爬虫文件代码

# -*- coding: utf-8 -*-
import scrapy
import re
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rulefrom pa_mzitu.items import PaMzituItem#
class MydomainSpider(CrawlSpider):name = 'mydomain'allowed_domains = ['www.mzitu.com']start_urls = ['https://www.mzitu.com']page_links = LinkExtractor(allow=(r"/page/2/"))page_home = LinkExtractor(allow=(r"https://www.mzitu.com/$"))# 设置解析link的规则,callback是指解析link返回的响应数据的的方法rules = [Rule(link_extractor=page_links, callback="parse_page", follow=True),Rule(link_extractor=page_home, callback="parse_page", follow=True)]def parse_page(self, response):#提取页码page_name = re.findall('/page/(\d+)/', response.url)if page_name:page_name = "page_%s"%page_name[0]else:page_name = "page_1"# 匹配内页图片连接xps = response.xpath("//ul[@id='pins']/li/a/@href").extract()for img_url in xps:url = img_urlrequest = scrapy.Request(url, callback=self.parse_item, meta={'page_name': page_name})yield requestdef parse_item(self, response):#获取下一张图片的连接next_img_url = response.xpath("//div[@class='pagenavi']/a[last()]/@href").extract()[0]#分页名称page_name = response.meta['page_name']if re.search(r'/\d+/\d+', next_img_url):yield scrapy.Request(url=next_img_url, callback=self.parse_item, meta={'page_name': page_name})item = PaMzituItem()# 文件夹名称file_name = response.xpath("//div[@class='main-image']/p/a/img/@alt").extract()[0]# 图片地址img_url = response.xpath("//div[@class='main-image']/p/a/img/@src").extract()[0]item['page_name'] = page_nameitem['file_name'] = file_nameitem['img_url'] = img_urlitem['img_referer'] = response.urlyield item

items.py 文件代码

# -*- coding: utf-8 -*-
import scrapy
from scrapy import Item,Fieldclass PaMzituItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()#图片地址img_url = Field()#图片来源地址img_referer = Field()#文件夹名称file_name = Field()#文件夹分页名称page_name = Field()

下载中间这里下载图片用的是scrapy官方图片提供的下载类

# -*- coding: utf-8 -*-
import scrapy
import refrom scrapy.pipelines.images import ImagesPipeline
from scrapy.exceptions import DropItemclass PaMzituPipeline(ImagesPipeline):def get_media_requests(self, item, info):# 下载图片,如果传过来的是集合需要循环下载# meta里面的数据是从spider获取,然后通过meta传递给下面方法:file_pathheaders = {"Referer": item['img_referer'],"User-Agent": " Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",}yield scrapy.Request(url=item['img_url'], headers=headers, meta={'file_name': item['file_name'], 'page_name': item['page_name']})def item_completed(self, results, item, info):# 是一个元组,第一个元素是布尔值表示是否成功if not results[0][0]:raise DropItem('下载失败')return item# 重命名,若不重写这函数,图片名为哈希,就是一串乱七八糟的名字def file_path(self, request, response=None, info=None):# 接收上面meta传递过来的图片名称page_name = request.meta['page_name']file_name = request.meta['file_name']# 提取url前面名称作为图片名image_name = request.url.split('/')[-1]# 清洗Windows系统的文件夹非法字符,避免无法创建目录folder_strip_page = re.sub(r'[?\\*|“<>:/]', '', str(page_name))folder_strip = re.sub(r'[?\\*|“<>:/]', '', str(file_name))# 分文件夹存储的关键:{0}对应着name;{1}对应着image_guidfilename = u'{0}/{1}/{2}'.format(folder_strip_page, folder_strip, image_name)return filename

做好这些之后,运行爬虫即可爬取,报模块错的话就下载依赖的模块就行了。
运行:
scrapy crawl ”爬虫名称“
附上结果图片



代码改天放上github,如果有做的不对,欢迎大佬指教。好了,今天就先到这。

用scrapy爬取妹子图网的图片,附上源代码相关推荐

  1. python爬取妹子图网健康图片

    为了博取大家的眼球,博主选了这个题材,现实生活中博主很正直的人,嗯 废话不说 demo,本demo只爬取了封面图片,内部图片方法相同 import requests from pyquery impo ...

  2. 使用python爬取斗图网的图片

    使用python爬取斗图网的图片 以下是代码部分: # -*- coding: utf-8 -*- """ Created on Wed Apr 14 14:41:42 ...

  3. python爬虫爬妹子图_【爬虫】直接上干货-爬取妹子图整站图片

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #coding=utf-8 import os import requests from lxml import etree import time cl ...

  4. 爬取彼岸图网4k图片

    爬取彼岸图网高清美女图片 代码如下

  5. python爬取妹子图片1_【爬虫】直接上干货-爬取妹子图整站图片

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #coding=utf-8 import os import requests from lxml import etree import time cl ...

  6. python scrapy 爬取妹子图的照片

    主要描述在windows 上如何用scrapy抓取煎蛋网妹子图所有的图片下载. 软件准备:winpython,啥都不说了,ipython很好用. 安装scrapy,进入winpython 执行scra ...

  7. requests库和lxml库爬取彼岸图网的图片

    ```python import requests,os from lxml import etree# 创建对应的存储的文件夹 if(not os.path.exists('./彼岸图网图片')): ...

  8. python多线程爬取妹子图网站_python爬取妹子图全站全部图片-可自行添加-线程-进程爬取,图片去重...

    from bs4 import BeautifulSoup import sys,os,requests,pymongo,time from lxml import etree def get_fen ...

  9. Scrapy爬取妹子图保存到不同目录下

    进行设置settings #启动图片管道 ITEM_PIPELINES = {'mztu.pipelines.ImagesPipelinse': 300, } #设置默认目录地址 注意下载图片的话默认 ...

最新文章

  1. python yield 和 return 对比分析
  2. : error c2062: 意外的类型“int”_Go 命令行解析 flag 包之扩展新类型
  3. Spring3注解@Component、@Repository、@Service、@Controller区别
  4. 「递归」第9集 | 我在腾讯做研究
  5. 51nod1551-集合交易【hall定理,最大权闭合图,网络流】
  6. JS判断是否是科学计算结果并处理
  7. 智慧讲台必须支持的协议
  8. UVa 12169 - Disgruntled Judge(拓展欧几里德)
  9. 人类历史上有哪些逆天的文物?
  10. java txt 二维数组_java 将一个二维数组存到txt文件里,然后再读取
  11. JavaMaven【三、常用指令】
  12. windows模拟微信小程序_微信PC端可以打开小程序了!目前仅支持Windows系统
  13. 使用VBScript和ADSI
  14. ace admin ajax加载页面,循环加载首页的解决办法
  15. django 使用时自定义fields的ModelSerializerield
  16. win中q-dir,everything,Windows Tabs,Clover各种效率神器(搜索,资源管理器,多标签)
  17. Apache+PHP+VC14环境搭建及测试
  18. 比尔盖茨与乔布斯,你们觉得,二人谁更伟大
  19. spring boot 自定义@EnableXXX注解
  20. ABP中把EF访问sql server改为mysql

热门文章

  1. Windows桌面整理
  2. PHP处理苹果APP内购后到服务端的二次验证(项目经验)
  3. java本地方法出现问题怎么办_Java调用本地方法又是怎么一回事
  4. 下面为子代选择器结合符的是_奥鹏2014秋福建师范大学《语言学概论》在线作业一答案...
  5. C语言程序运行的步骤
  6. 脚本实现,抓取屏幕内容
  7. 怎么使用计算机计算,win10 自带计算器怎么输入_win10自带计算器的使用教程
  8. Python的中文识别问题解决办法
  9. 拓扑与量子物理题目选做
  10. linux打怪升级之旅-04