美文网首页Python 运维爬虫python加油站
爬取mm29全站妹子图片(scrapy版)

爬取mm29全站妹子图片(scrapy版)

作者: 安和然 | 来源:发表于2017-12-03 13:25 被阅读154次

先看下成果:


3.jpg

这是跑了三个小时下载的,还没下完,不过应该可以一直跑。太占硬盘,下载完后就删除了。

1.jpg

Scrapy是一个python的爬虫框架,最大的好处是简单,只要把几处代码加上即可。

items.py

    #定义图片链接和图片名
    imgurl = scrapy.Field()
    imgname = scrapy.Field()

在spider.py,编写抓取规则

# -*- coding: utf-8 -*-
import scrapy
from mm29.items import  Mm29Item

class Mm29picSpider(scrapy.Spider):
    name = 'mm29pic'
    allowed_domains = ['mm29.com']
    url = 'http://www.mm29.com/index/'
    index = 1
    start_urls = ['http://www.mm29.com/index/' + str(index)]

    def parse(self, response):
        #获取每一页的MM链接
        node_list = response.xpath("//h2/a[@target='_blank']/@href").extract()
        for node in node_list:
            #回调下载当前页MM所有照片
            yield scrapy.Request(node,callback = self.parse_page)
        for page in range(2, 908):#908为当前mm29网站所有页面数
            #解析下一页所有MM链接
            nextUrl = 'http://www.mm29.com/index/' + str(page)
            yield scrapy.Request(nextUrl, callback = self.parse)

    def parse_page(self,response):
        #获取图片链接和名称
        pic_src = response.xpath("//p/img/@src").extract()
        pic_name = response.xpath("//p/img/@alt").extract()
        item = Mm29Item()
        for i in range(0,len(pic_name)):
            print("get"+pic_name[i])
            item["imgname"] = pic_name[i]
            item["imgurl"] = pic_src[i]
            yield item

保存图片有点稍微不一样。Scrapy提供了一个 item pipeline ,来下载属于某个特定项目的图片,比如,当你抓取产品时,也想把它们的图片下载到本地。这条管道,被称作图片管道,在 ImagesPipeline 类中实现,提供了一个方便并具有额外特性的方法,来下载并本地存储图片:

import PIL
import scrapy
from scrapy.pipelines.images import ImagesPipeline

class Mm29Pipeline(ImagesPipeline):#继承ImagesPipeline,是图片保存的一个类
    def get_media_requests(self, item, info):#改写这个方法 get_media_requests
        img_link = item["imgurl"]
        yield scrapy.Request(img_link)

在settings.py里,要启动图片下载

ITEM_PIPELINES = {
    'mm29.pipelines.Mm29Pipeline': 300,
}

设置下载目录:

IMAGES_STORE = 'd:/downloadimg'

我用的是pycharm,为了方便调试,增加一个main.py,在里面加一行:

#!/usr/bin/python

from scrapy.cmdline import execute
execute("scrapy crawl mm29pic".split())

运行main.py即可。

相关文章

  • scrapy爬取妹子图

    废话不多说,爬取妹子图片使用scrapy深度爬取,抓取妹子图全站图片 1.首先确认开发环境 使用scrapy框架,...

  • 爬取mm29全站妹子图片(scrapy版)

    先看下成果: 这是跑了三个小时下载的,还没下完,不过应该可以一直跑。太占硬盘,下载完后就删除了。 Scrapy是一...

  • scrapy里面item传递数据后数据不正确的问题

    在上篇文章《python3 + scrapy 爬取妹子图 (meizitu.com)》中,我爬取了妹子图网站的图片...

  • Scrapy爬取图片续集

    上一篇咱们讲解了Scrapy的工作机制和如何使用Scrapy爬取美女图片,而今天接着讲解Scrapy爬取美女图片,...

  • 六. 项目实战:下载360图片

    爬取网址:http://image.so.com/爬取信息:爬取图片爬取方式:scrapy框架存储方式:Image...

  • scrapy+redis增量爬虫

    scrapy适合一次性爬取全站,如果我想多次爬取,主目录页面难免会出现重复,去重增量爬取就很有必要了。我在网上搜到...

  • 美女写真套图爬虫(二)

    爬取网站 : http://www.mzitu.com 爬取全站 3000 多套图片,整整 10 个G 有图有真相...

  • Scrapy爬取豆瓣读书全站

    分析网页 首先打开豆瓣读书中的分类浏览,可以看到其中有很多的分类 分类 豆瓣应该是一个比较好爬的网站,所有的数据都...

  • 利用python框架Scrapy爬取妹子图片

    安装Scrapy框架 直接运行pip install scrapy后出现错误提示: 查看官方文档,发现scrapy...

  • Scrapy爬取妹子图

    本来呢,一开始想爬取的是这个网站,http://www.mzitu.com/,但是呢?问题发现比较多,所以先爬取了...

网友评论

  • 知识学者:也准备学习一下爬虫,看来scrapy 比自带的好多了:grin:

本文标题:爬取mm29全站妹子图片(scrapy版)

本文链接:https://www.haomeiwen.com/subject/zxuabxtx.html