资讯专栏INFORMATION COLUMN

scrapy简单学习5—图片下载,爬取妹子图

JerryZou / 2785人阅读

摘要:学习网站爬虫,整站爬取妹子图定义爬取的内容的编写提供了一种便捷的方式填充抓取到的是页面源代码,载入每个连接,用属性请求连接,返回请求获取页码集合打印页码如果页码集合图片连接读取页码集合的倒数第二个页码图片连接替换成空返回请求用载

学习网站:爬虫,整站爬取妹子图

1.item.py(定义爬取的内容)
import scrapy


class MeizituItem(scrapy.Item):
    url = scrapy.Field()
    name = scrapy.Field()
    tags = scrapy.Field()
    image_urls = scrapy.Field()
    images = scrapy.Field()
2.spider的编写
# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import Selector
#Item Loaders提供了一种便捷的方式填充抓取到的 :Items
from scrapy.contrib.loader import ItemLoader, Identity
from meizitu.items import MeizituItem

class MeiziSpider(scrapy.Spider):
    name = "meizi"
    allowed_domains = ["meizitu.com"]
    start_urls = (
        "http://www.meizitu.com/",
    )

    def parse(self, response):
        #sel是页面源代码,载入scrapy.selector
        sel = Selector(response)
        #每个连接,用@href属性
        for link in sel.xpath("//h2/a/@href").extract():
            #请求=Request(连接,parese_item)
            request = scrapy.Request(link, callback=self.parse_item)
            yield request#返回请求
        #获取页码集合
        pages = sel.xpath("//*[@id="wp_page_numbers"]/ul/li/a/@href").extract()
        print("pages: %s" % pages)#打印页码
        if len(pages) > 2:#如果页码集合>2
            page_link = pages[-2]#图片连接=读取页码集合的倒数第二个页码
            page_link = page_link.replace("/a/", "")#图片连接=page_link(a替换成空)
            request = scrapy.Request("http://www.meizitu.com/a/%s" % page_link, callback=self.parse)
            yield request#返回请求

    def parse_item(self, response):
        #l=用ItemLoader载入MeizituItem()
        l = ItemLoader(item=MeizituItem(), response=response)
        #名字
        l.add_xpath("name", "//h2/a/text()")
        #标签
        l.add_xpath("tags", "//div[@id="maincontent"]/div[@class="postmeta  clearfix"]/div[@class="metaRight"]/p")
        #图片连接
        l.add_xpath("image_urls", "//div[@id="picture"]/p/img/@src", Identity())
        #url
        l.add_value("url", response.url)
        
        return l.load_item()
3.pipeline的编写(下载图片,新增图片)
# -*- coding: utf-8 -*-

# Define your item pipelines here
#图片下载部分(自动增量)
# Don"t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import requests
from meizitu import settings
import os

#图片下载类
class ImageDownloadPipeline(object):
    def process_item(self, item, spider):
        if "image_urls" in item:#如何‘图片地址’在项目中
            images = []#定义图片空集
            
            dir_path = "%s/%s" % (settings.IMAGES_STORE, spider.name)

            if not os.path.exists(dir_path):
                os.makedirs(dir_path)
            for image_url in item["image_urls"]:
                us = image_url.split("/")[3:]
                image_file_name = "_".join(us)
                file_path = "%s/%s" % (dir_path, image_file_name)
                images.append(file_path)
                if os.path.exists(file_path):
                    continue

                with open(file_path, "wb") as handle:
                    response = requests.get(image_url, stream=True)
                    for block in response.iter_content(1024):
                        if not block:
                            break

                        handle.write(block)

            item["images"] = images
        return item
4.settings
BOT_NAME = "meizitu"

SPIDER_MODULES = ["meizitu.spiders"]
NEWSPIDER_MODULE = "meizitu.spiders"
#载入ImageDownLoadPipeline类
ITEM_PIPELINES = {"meizitu.pipelines.ImageDownloadPipeline": 1}
#图片储存
IMAGES_STORE = "."
结果

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44162.html

相关文章

  • Scrapy 实战之爬取妹子

    摘要:很多人学习爬虫的第一驱动力就是爬取各大网站的妹子图片,比如比较有名的。最后我们只需要运行程序,即可执行爬取,程序运行命名如下完整代码我已上传到微信公众号后台,在痴海公众号后台回复即可获取。本文首发于公众号痴海,后台回复即可获取最新编程资源。 showImg(https://segmentfault.com/img/remote/1460000016780800); 阅读文本大概需要 1...

    Achilles 评论0 收藏0
  • Python爬虫 - scrapy - 爬取妹子 Lv2

    摘要:前言这个文章是延续之前爬取妹子图的延续,之前的爬虫可以爬取一个页面的图片,爬取一次大概张图片的样子,按照之前的计划,本次要进一步完善爬虫,爬取妹子图全网图片。做完上述改动后,爬虫运行基本正常,但是爬取的速度有点慢,个小时大概爬取了张图片。 0. 前言 这个文章是延续之前《爬取妹子图 Lv1》的延续,之前的爬虫可以爬取一个页面的图片,爬取一次大概400张图片的样子,按照之前的计划,本次要...

    Backache 评论0 收藏0
  • Python爬虫 - scrapy - 爬取妹子 Lv1

    摘要:爬取妹子图的实例打算分成三部分来写,尝试完善实用性。中的每一个子项都是一个标签。这个说明的前提是不自定义当爬虫完成的模型数据采集后,会自动将发送给处理。 0. 前言 这是一个利用python scrapy框架爬取网站图片的实例,本人也是在学习当中,在这做个记录,也希望能帮到需要的人。爬取妹子图的实例打算分成三部分来写,尝试完善实用性。 系统环境 System Version:Ubunt...

    el09xccxy 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • scrapy 实战练习

    摘要:爬取百思不得姐首先一步一步来,我们先从爬最简单的文本开始。将百思不得姐段子保存到中别忘了将管道加到配置文件中。虽然我只是简单的爬了百思不得姐,不过这些方法可以应用到其他方面,爬取更多更有用的数据。 前一篇文章介绍了很多关于scrapy的进阶知识,不过说归说,只有在实际应用中才能真正用到这些知识。所以这篇文章就来尝试利用scrapy爬取各种网站的数据。 爬取百思不得姐 首先一步一步来,我...

    betacat 评论0 收藏0

发表评论

0条评论

JerryZou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<