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

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

Step1:

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

scrapy startproject CrawlMeiziTu

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

CrawlMeiziTu/

scrapy.cfg

CrawlMeiziTu/

__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.cfg

CrawlMeiziTu/

__init__.py

items.py

pipelines.py

settings.py

middlewares.py

spiders/

Meizitu.py

__init__.py

...

我们主要编辑的就如下图箭头所示:

main.py是后来加上的,加了两条命令,

from scrapy import cmdline

cmdline.execute("scrapy crawl Meizitu".split())

主要为了方便运行。

Step2:编辑Settings,如下图所示

BOT_NAME = 'CrawlMeiziTu'

SPIDER_MODULES = ['CrawlMeiziTu.spiders']

NEWSPIDER_MODULE = 'CrawlMeiziTu.spiders'

ITEM_PIPELINES = {

'CrawlMeiziTu.pipelines.CrawlmeizituPipeline': 300,

}

IMAGES_STORE = 'D://pic2'

DOWNLOAD_DELAY = 0.3

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'

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.html

import scrapy

class 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:编辑Pipelines

Pipelines主要对items里面获取的信息进行处理。比如说根据title创建文件夹或者图片的名字,根据图片链接下载图片。

# -*- coding: utf-8 -*-

import os

import requests

from CrawlMeiziTu.settings import IMAGES_STORE

class 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):

continue

with 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 request

all_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/@alt

item['title'] = image_title

item['url'] = image_url

item['tags'] = image_tags

item['src'] = image_src

item['alt'] = pic_name

print(item)

time.sleep(1)

yield item

总结

以上所述是小编给大家介绍的Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码,希望对大家有所帮助,如果大家啊有任何疑问欢迎给我留言,小编会及时回复大家的!

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

  1. Python使用Scrapy爬虫框架全站爬取图片并保存本地(@妹子图@)

    大家可以在Github上clone全部源码. Github:https://github.com/williamzxl/Scrapy_CrawlMeiziTu Scrapy官方文档:http://sc ...

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

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

  3. python scrapy框架 抓取的图片路径打不开图片_Python中Scrapy爬虫图片处理详解

    下载图片 下载图片有两种方式,一种是通过 Requests 模块发送 get 请求下载,另一种是使用 Scrapy 的 ImagesPipeline 图片管道类,这里主要讲后者. 安装 Scrapy ...

  4. Python爬取图片并保存本地

    好久没用requests写爬虫了,因为是国内的网站,展示没有使用代理IP,而且爬取的数据不多. 1.第一步将要爬取的网页链接爬取下来.这句话有些矛盾. url='http://www.supe.com ...

  5. python爬虫获取下一页_Python Scrapy 自动抓取下一页内容

    最近在学下Scrapy,抓取下一页的时候遇到了问题 import scrapy from crawlAll.items import CrawlallItem class ToutiaoEssayJo ...

  6. python frame框架抓取_Python抓取框架Scrapy爬虫入门:页面提取

    前言 Scrapy是一个非常好的抓取框架,它不仅提供了一些开箱可用的基础组建,还能够根据自己的需求,进行强大的自定义.本文主要给大家介绍了关于Python抓取框架Scrapy之页面提取的相关内容,分享 ...

  7. Python爬虫实战之二 - 基于Scrapy框架抓取Boss直聘的招聘信息

    Python爬虫实战之三 - 基于Scrapy框架抓取Boss直聘的招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于 ...

  8. 使用scrapy框架抓取手机商品信息(2)

    目录 1.模块设计 2.手机页面代码编写 2.1数据获取 2.2主页面编写 3.功能编写 3.1通过人民查询 3.2清空选项和查询函数 3.3列表相关功能定义 4.最终成功展示和总结 上一篇:使用sc ...

  9. 使用scrapy框架抓取手机商品信息(1)

    目录 1.准备工作 1.1 启动pycharm 1.2 setting.py 配置 1.3爬取页面分析 2.代码编写 2.1 爬虫代码 2.2 piplines.py代码编写 3 运行及收尾 追加 1 ...

最新文章

  1. OpenStack 虚拟机热迁移流程图
  2. 知道python语言应用2020答案_热点:大学moocPython语言基础与应用答案
  3. NetTiers学习笔记09---RADGrid + EntityDataSource设置默认排序, 及表格自动排序,分页的方法...
  4. MySQL字段类型详解
  5. 广义平稳随机过程定义_广义平稳随机过程介绍.ppt
  6. JS DOM节点(当前标签和同级、父级、子级..之间的关系)
  7. windows系统服务器打补丁,给Windows打补丁太难?2招搞定
  8. PLSQL使用text import导入数据
  9. 如何使用IDEA运行Spring实战(第四版)代码
  10. 带通 带阻滤波器 幅频响应_方程推导:二阶有源带通滤波器设计!(内附教程+原理图+视频+代码下载)...
  11. Docker傻瓜式安装到使用
  12. Python之面向对象
  13. java 相关学习笔记
  14. 专利代理机构代理专利流程
  15. ecshop系统前后台出现的几个错误修正升级到PHP5.6后
  16. git入库基本操作流程
  17. ubuntu下mongodb及其可视化工具robomongo安装
  18. 03 SpringMVC 处理响应
  19. 微电影的特征有哪些?
  20. WP微信机器人插件v2(更新)

热门文章

  1. 为什么80%的企业会选择云产品?
  2. 【数字信号】基于matlab GUI多音双频(DTMF)拨号音频解码仿真系统【含Matlab源码 1084期】
  3. 拼多多新店铺上架多少宝贝合适?是越多越好吗?
  4. SPI Flash芯片W25Q32英文版数据手册解读(二)---------存储器知识,寄存器
  5. 更完善的 Docker + Traefik 使用方案
  6. 许多知名公司宕机现象频繁发生
  7. Hexo添加Live2D看板娘最新教程
  8. 第三课——win10常用快捷键的使用
  9. 日元对人民币汇率的大数据分析与预测
  10. 临床数据共享能带来什么好处?