python3 + scrapy爬取妹子图(meizitu.com)

本文介绍了如何使用Python3和Scrapy框架爬取妹子图网站的内容,包括从首页获取标签链接,遍历标签页、专辑页,提取并下载图片。在实践中,详细阐述了Scrapy的层次结构,以及如何自定义管道保存图片,并对爬虫进行了后续优化的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在学会scrapy之前,都是用requests + BeautifulSoup + lxml来爬取的,这样也能爬到想要的东西,但缺点是代码有些乱,可能需要自己对项目进行梳理归类。而scrapy框架很好的解决了这个问题,它将爬虫的整个工序都分离开,各司其职,项目结构看起来很优雅。并且框架提供了很多非常实用的方法,不必再自己去单独写了,简直是良心。爬虫的乐趣在于爬取感兴趣的东西,下面将以爬取妹子图(meizitu.com)来实践下。

了解网站,理清爬虫思路

进入妹子图,可以看到网站首页,中间有一条美女分类的标签,如图:

这里写图片描述

然后当点进某个分类之后,会得到很多分页,每个分页有很多图片专辑,点击每个专辑进去就会看到很多图片,这个图片就是我们需要的,那大致思路可以出来了,即:

  1. 通过首页 (http://www.meizitu.com/),爬取标签名称tag_name和标签链接tag_href
  2. 通过标签链接,爬取当前标签下全部页面page_list
  3. 通过页面,爬取当前页面的图片专辑名称album_name和图片专辑链接album_href
  4. 通过专辑链接,爬取该专辑里面所有图片名称img_title、图片链接img_src及图片链接列表img_urls
  5. 通过图片链接,ImagesPipeline下载图片到设定的文件夹

通过以上思路,可以确定几点,

  1. items应该包含哪些?

    毫无疑问,tag_name tag_href page_list album_name album_href imgs img_title img_urls就是需要定义的item

  2. 爬虫的入口是什么?

    网站首页,即http://www.meizitu.com/

  3. 爬虫应该分几层?

    根据思路,我们前面 4 步,都是通过不同的链接爬取相关信息,那爬虫也相应的需要 4 层。

    第一层,爬取标签链接:parse_tag

    第二层,爬取标签下页面链接:parse_page

    第三层,爬取页面下专辑链接:parse_album

    第四层,爬取专辑下图片链接:parse_img

  4. 怎么保存图片?

    scrapy框架提供一个item pipeline来保存图片,即ImagesPipeline,我们只需要重写一个管道继承ImagesPipeline,并且重写get_media_requests(item, info) 和item_completed(results, items, info) 这两个方法即可

代码实践

1、首先定义item

items.py

import scrapy


class MeizituItem(scrapy.Item):
    # 标签名称
    tag_name = scrapy.Field()
    # 标签链接
    tag_href = scrapy.Field()
    # 进入某标签后的所有链接,加页码的
    page_list = scrapy.Field()
    # 图片专辑名称
    album_name = scrapy.Field()
    # 图片专辑链接
    album_href = scrapy.Field()
    # 照片标题
    img_title = scrapy.Field()
    # 照片链接
    img_src = scrapy.Field()
    # 照片链接集合,用于ImagesPipeline下载图片
    img_urls = scrapy.Field()
2、完成提取数据代码

mzt.py

# -*- codin
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值