大家可以在Github上clone全部源码。

Github:https://github.com/williamzxl/Scrapy_CrawlMeiziTu

Scrapy官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html

基本上按照文档的流程走一遍就基本会用了。

Step1:

在开始爬取之前,必须创建一个新的Scrapy项目。 进入打算存储代码的目录中,运行下列命令:

scrapy startproject CrawlMeiziTu

该命令将会创建包含下列内容的 tutorial 目录:

CrawlMeiziTu/scrapy.cfgCrawlMeiziTu/ __init__.py items.py pipelines.py settings.py     middlewares.py spiders/ __init__.py ... cd CrawlMeiziTu
scrapy genspider Meizitu http://www.meizitu.com/a/list_1_1.html

该命令将会创建包含下列内容的 tutorial 目录:

CrawlMeiziTu/scrapy.cfgCrawlMeiziTu/     __init__.py items.py pipelines.py settings.py     middlewares.py spiders/       Meizitu.py __init__.py ... 
我们主要编辑的就如下图箭头所示:

main.py是后来加上的,加了两条命令,
1 from scrapy import cmdline
2
3 cmdline.execute("scrapy crawl Meizitu".split())

主要为了方便运行。

Step2:编辑Settings,如下图所示
 1 BOT_NAME = 'CrawlMeiziTu'
 2
 3 SPIDER_MODULES = ['CrawlMeiziTu.spiders']
 4 NEWSPIDER_MODULE = 'CrawlMeiziTu.spiders'
 5 ITEM_PIPELINES = {
 6    'CrawlMeiziTu.pipelines.CrawlmeizituPipeline': 300,
 7 }
 8 IMAGES_STORE = 'D://pic2'
 9 DOWNLOAD_DELAY = 0.3
10
11 USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
12 ROBOTSTXT_OBEY = True

主要设置USER_AGENT,下载路径,下载延迟时间


Step3:编辑Items.Items主要用来存取通过Spider程序抓取的信息。由于我们爬取妹子图,所以要抓取每张图片的名字,图片的连接,标签等等
# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.htmlimport scrapyclass CrawlmeizituItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()#title为文件夹名字title = scrapy.Field()url = scrapy.Field()tags = scrapy.Field()#图片的连接src = scrapy.Field()#alt为图片名字alt = scrapy.Field()


Step4:编辑PipelinesPipelines主要对items里面获取的信息进行处理。比如说根据title创建文件夹或者图片的名字,根据图片链接下载图片。
# -*- coding: utf-8 -*-
import os
import requests
from CrawlMeiziTu.settings import IMAGES_STOREclass CrawlmeizituPipeline(object):def process_item(self, item, spider):fold_name = "".join(item['title'])header = {'USER-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36','Cookie': 'b963ef2d97e050aaf90fd5fab8e78633',#需要查看图片的cookie信息,否则下载的图片无法查看
        }images = []# 所有图片放在一个文件夹下dir_path = '{}'.format(IMAGES_STORE)if not os.path.exists(dir_path) and len(item['src']) != 0:os.mkdir(dir_path)if len(item['src']) == 0:with open('..//check.txt', 'a+') as fp:fp.write("".join(item['title']) + ":" + "".join(item['url']))fp.write("\n")for jpg_url, name, num in zip(item['src'], item['alt'],range(0,100)):file_name = name + str(num)file_path = '{}//{}'.format(dir_path, file_name)images.append(file_path)if os.path.exists(file_path) or os.path.exists(file_name):continuewith open('{}//{}.jpg'.format(dir_path, file_name), 'wb') as f:req = requests.get(jpg_url, headers=header)f.write(req.content)return item


Step5:编辑Meizitu的主程序。最重要的主程序:
# -*- coding: utf-8 -*-
import scrapy
from CrawlMeiziTu.items import CrawlmeizituItem
#from CrawlMeiziTu.items import CrawlmeizituItemPage
import time
class MeizituSpider(scrapy.Spider):name = "Meizitu"#allowed_domains = ["meizitu.com/"]
start_urls = []last_url = []with open('..//url.txt', 'r') as fp:crawl_urls = fp.readlines()for start_url in crawl_urls:last_url.append(start_url.strip('\n'))start_urls.append("".join(last_url[-1]))def parse(self, response):selector = scrapy.Selector(response)#item = CrawlmeizituItemPage()
next_pages = selector.xpath('//*[@id="wp_page_numbers"]/ul/li/a/@href').extract()next_pages_text = selector.xpath('//*[@id="wp_page_numbers"]/ul/li/a/text()').extract()all_urls = []if '下一页' in next_pages_text:next_url = "http://www.meizitu.com/a/{}".format(next_pages[-2])with open('..//url.txt', 'a+') as fp:fp.write('\n')fp.write(next_url)fp.write("\n")request = scrapy.http.Request(next_url, callback=self.parse)time.sleep(2)yield requestall_info = selector.xpath('//h3[@class="tit"]/a')#读取每个图片夹的连接for info in all_info:links = info.xpath('//h3[@class="tit"]/a/@href').extract()for link in links:request = scrapy.http.Request(link, callback=self.parse_item)time.sleep(1)yield request# next_link = selector.xpath('//*[@id="wp_page_numbers"]/ul/li/a/@href').extract()# next_link_text = selector.xpath('//*[@id="wp_page_numbers"]/ul/li/a/text()').extract()# if '下一页' in next_link_text:#     nextPage = "http://www.meizitu.com/a/{}".format(next_link[-2])#     item['page_url'] = nextPage#     yield item#抓取每个文件夹的信息def parse_item(self, response):item = CrawlmeizituItem()selector = scrapy.Selector(response)image_title = selector.xpath('//h2/a/text()').extract()image_url = selector.xpath('//h2/a/@href').extract()image_tags = selector.xpath('//div[@class="metaRight"]/p/text()').extract()if selector.xpath('//*[@id="picture"]/p/img/@src').extract():image_src = selector.xpath('//*[@id="picture"]/p/img/@src').extract()else:image_src = selector.xpath('//*[@id="maincontent"]/div/p/img/@src').extract()if selector.xpath('//*[@id="picture"]/p/img/@alt').extract():pic_name = selector.xpath('//*[@id="picture"]/p/img/@alt').extract()else:pic_name = selector.xpath('//*[@id="maincontent"]/div/p/img/@alt').extract()#//*[@id="maincontent"]/div/p/img/@altitem['title'] = image_titleitem['url'] = image_urlitem['tags'] = image_tagsitem['src'] = image_srcitem['alt'] = pic_nameprint(item)time.sleep(1)yield item

转载于:https://www.cnblogs.com/william126/p/6923017.html

Python使用Scrapy爬虫框架全站爬取图片并保存本地(@妹子图@)相关推荐

  1. python scrapy框架 抓取的图片路径打不开图片_Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码...

    大家可以在Github上clone全部源码. 基本上按照文档的流程走一遍就基本会用了. Step1: 在开始爬取之前,必须创建一个新的Scrapy项目. 进入打算存储代码的目录中,运行下列命令: sc ...

  2. 使用Scrapy爬虫框架简单爬取图片并保存本地(妹子图)

    使用Scrapy爬虫框架简单爬取图片并保存本地(妹子图) 初学Scrapy,实现爬取网络图片并保存本地功能 一.先看最终效果 保存在F:\pics文件夹下 二.安装scrapy 1.python的安装 ...

  3. 【Python】Scrapy爬虫框架小试牛刀:爬取某论坛招聘信息

    Scrapy爬虫框架小试牛刀:爬取某论坛招聘信息 背景 Scrapy工作原理 创建项目 创建爬虫 确定数据爬取思路 编写对象:item.py 制作爬虫:muchongrecruit.py 存储内容:p ...

  4. Python使用Scrapy爬虫框架爬取天涯社区小说“大宗师”全文

    大宗师是著名网络小说作家蛇从革的系列作品"宜昌鬼事"之一,在天涯论坛具有超级高的访问量.这个长篇小说于2015年3月17日开篇,并于2016年12月29日大结局,期间每天有7万多读 ...

  5. python的scrapy爬虫可以将爬去的数据放入数据库吗_Python基于Scrapy的爬虫 数据采集(写入数据库)...

    上一节已经学了如何在spider里面对网页源码进行数据过滤. 这一节将继续学习scrapy的另一个组件-pipeline,用来2次处理数据 (本节中将以储存到mysql数据库为例子) 虽然scrapy ...

  6. Python-爬虫(Scrapy爬虫框架,爬取豆瓣读书和评分)

    文章目录 1.Scrapy注意点 2. Scrapy爬取豆瓣读书和评分 代码部分 数据定义items.py 爬虫部分spiders/book.py 数据存储部分pipelines.py 启动爬虫执行c ...

  7. scrapy爬虫系列之三--爬取图片保存到本地

    功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...

  8. Python 采用Scrapy爬虫框架爬取豆瓣电影top250

    scrapy 简介 在此,默认已经安装好Scrapy,如果没有安装可以到scrapy 官网下载安装. 注意: 在安装Scrapy之前首先需要安装一下python第三方库:(安装方法并不在本文讲解范围, ...

  9. Scrapy爬虫框架,爬取小说网的所有小说

    Scrapy入门教程请看 目录 1.思路清理 2.创建爬虫项目 3. 爬虫架构构思 4.爬虫程序具体分析 5.效果展示 6.待优化的地方 1.思路清理 我们的目的是把某个小说网的所有小说给拿下,这就涉 ...

最新文章

  1. SHELL 技能树(持续更新)
  2. strlen与sizeof区别
  3. 4怎么放大字体_Word字体怎么放大?简单教你几招轻松搞定
  4. CycleGAN 各种变变变
  5. 大学计算机基础知识判断题,大学计算机基础学习知识判断题.doc
  6. Python-进程相关概念
  7. 迅雷前CEO陈磊涉嫌职务侵占罪已被立案侦查,股价周四下跌超7%
  8. 如何让cloudflare缓存html,wordpress博客使用CloudFlare的页面规则缓存设置教程
  9. java 档案管理系统论文_基于JAVA学生档案管理系统论文.doc
  10. 学习 shell —— 条件判断 if 的参数
  11. 简述vue-router实现原理
  12. 快速清理Exchange 2003中的SMTP队列
  13. 手机APP数据包抓包分析
  14. [CF1031E]Triple Flips
  15. 虚拟网络之Kubernetes Cilium CNI 快速部署实操
  16. Virginie Ruiz
  17. 231313132131
  18. 基础篇 | 材质01 | 4种法线
  19. SAP BAPI BAPI_PO_CREATE1创建采购订单
  20. babylon.js实战教程

热门文章

  1. 计算机用户名怎么改好听,Win10如何修改电脑名字 Win10重命名电脑名称方法图解...
  2. 优化 | Pick and delivery problem的简介与建模实现(一)
  3. 软磁材料的环境敏感性
  4. 用editplus删除csv文件中的软回车
  5. 河大计算机学院足球队,“河大杯”我院足球队两连胜提前晋级淘汰赛
  6. 企业微信机器人脚本python_python3 企业微信机器人发送图片
  7. 武松杀潘金莲时为何先扯开其衣服?得知真相才明白武松多么机智!
  8. python中的列表list(四):列表的遍历
  9. 逆向某停车app(原创)
  10. 2023浙江工业大学计算机考研经验贴