首页 编程教程正文

scrapy框架爬虫实战--轻松下载各种美食美女头像图片

piaodoo 编程教程 2020-02-22 22:09:25 1156 0 python教程

本文来源吾爱破解论坛

Python--scrapy框架爬虫实战
准备工作
嗨学网
python3开发环境相应的python包:
[Python] 纯文本查看 复制代码

import scrapy
from PhotoSpider.items import PhotospiderItem
import re
from urllib.request import *

貌似都是自带的包,不需要另外安装开发环境: 这里使用的是pycharm谷歌浏览器:用于抓包分析(其他浏览器也可以)


分析网页结构
嗨学网

网站:https://www.mn52.com/    mn52图库网  (正规!正规!)

这个网站是一个图片网站,内容基本都是图片,分类有很多,因为网页结构都是一样的,所以我这里选取了头像集这个分类进行分析(办公室环境,美女图什么就算了)

头像集:https://www.mn52.com/txj/


首先嘛,是分析图片的url组成,想获取最终的的图片url需要先从头像集页面那 4 * 7 组图片点击一个进去就到图片详情页了,这时候就可以用检查代码看到具体图片的url了

那么,思路就是进入初始url : https://www.mn52.com/txj/ → 爬取到 4 * 7 个详情页面的url → 进入到对应图片详情页 → 爬取到详情页内那一排的原图url → 下载

咳咳,那么,下面就是开始框架的安装了。。。

scrapy 框架安装
嗨学网

首先打开 cmd,然后 cd 到python的工作目录,输入项目名为 PhotoSpider 的命令(名字什么的当然可以自己定了)
[Python] 纯文本查看 复制代码
scrapy startproject PhotoSpider


然后这时候在目录下会出现一个 PhotoSpider 文件夹,这时候我们还要继续在  cmd  上操作,输入以下代码创建 Spider类
[Asm] 纯文本查看 复制代码
cd PhotoSpider
scrapy genspider getPhotoSpider mn52.com


getPhotoSpider 将是我们运行框架的关键,这里所有的文件已经创建完成,现在就是做填空啦~

完整代码
嗨学网

首先填的是 items.py  用来定义想获得的属性
[Python] 纯文本查看 复制代码
import scrapy


class PhotospiderItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    # 跟着上面填就是了
    # 图片名
    photo_id = scrapy.Field()
    # 图片下载地址
    photo_url = scrapy.Field()



接着就是最最重要的 getPhotoSpider.py 获取页面信息并过滤出想要的
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-
import scrapy
from PhotoSpider.items import PhotospiderItem
import re


class GetphotospiderSpider(scrapy.Spider):
    name = 'getPhotoSpider'
    allowed_domains = ['mn52.com']
    start_urls = ['https://www.mn52.com/txj/']  # 这里填写头像集的url,当然,可以将txj改成你想要的分类

    # 添加__init__函数用于存放页数
    def __init__(self):
        self.page_index = 1

    def parse(self, response):
        # 填空题开始了!!从这里xpath在start_urls上获取的消息,过滤出url
        for photo in response.xpath('//div[@class="content"]/div[2]/div'):
            url = photo.xpath('./div/a/@href').extract_first()
            # 这里要给url加上https,否则会。。无法访问
            url_new = 'https:' + url
            # 将新的url甩给下面的函数,也就是爬取下级页面信息~
            yield scrapy.Request(url_new, callback=self.parse_detail, dont_filter=True)

    def parse_detail(self, response):
        # 过滤从上面丢下来的信息,得到photo_url,也就是真实的图片下载链接
        for photos in response.xpath('//div[@id="originalpic"]/img'):
            # 这个是正则表达式,用来筛选出//image.mn52.com/img/allimg/190906/8-1ZZ6094322-53.jpg中的8-1ZZ6094322-53
            pattern = '\w*?\-\w+'
            # 这个 PhotospiderItem 是用来存放的,在items.py里面
            item = PhotospiderItem()
            item['photo_url'] = photos.xpath('./@src').extract_first()
            item['photo_id'] = re.search(pattern, item['photo_url']).group()
            yield item
        # 这是用来执行下一页的
        self.page_index += 1
        # 下面的12代表第十二个分类(头像集),修改分类的时候需要同时将这个12一起修改(比如爬取美食图片要将12改成10)
        next_link = 'https://www.mn52.com/mstp/list_12_' + str(self.page_index) + '.html'
        yield scrapy.Request(next_link, callback=self.parse)



emmmm,然后就是处理页 pipelines.py 这里是用来将下载图片
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
from urllib.request import *


class PhotospiderPipeline(object):

    def process_item(self, item, spider):
        print('--------------' + item['photo_id'])
        # 对下载地址加https,不然又无法访问
        real_url ='https:' + item['photo_url']
        # 这里是加信息头(反反爬),本来是在中间件中加的,但是可能是二级跳转的原因,没效果,所以就直接在这里加了
        opener = build_opener()
        opener.addheaders = [('User-Agent',
                      'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36')]
        install_opener(opener)
        print('开始下载' + real_url)
        # 下载到项目环境目录下的文件夹images中
        with urlopen(real_url) as result:
            data = result.read()
            # 这是文件命名方式,嫌麻烦,统一用jpg格式命名了。。
            with open("images/" + item['photo_id'] + '.jpg', 'wb+') as f:
                f.write(data)
                print('下载完成')




这边填空题基本已经做完啦~~,下面修改一下分配器 settings.py  分配下任务哦~(可能被# 备注了,去掉#就好了,后面300多少随意,只是个执行顺序)
[Python] 纯文本查看 复制代码
ITEM_PIPELINES = {
     'PhotoSpider.pipelines.PhotospiderPipeline': 300,
}


代码写完了。。。。。嗨学网
别忘了在PhotoSpider项目目录下创建images文件夹,也就是E:\PycharmProjects\xxxxx\PhotoSpider下

最最最后,也就是最最最关键的当然是运行啦,打开 cmd 运行,cd 到项目目录下,跟上面的目录一样,运行代码
[Python] 纯文本查看 复制代码
scrapy crawl getPhotoSpider


效果如下
嗨学网

嗨学网

大功告成~嗨学网

待改进的地方
嗨学网

每次爬取新的分类都需要对getPhotoSpider.py 里面的 start_urls 和 next_link 进行修改 嗨学网
当然,也可以对项目打包成 .exe  ,具体流程百度比我牛逼多了,这里就不打包了



后记嗨学网

详细思路可以去 美女图片爬虫实战--轻松爬取几万张美女图片 他写的比我细节多了




下载图片文件夹示例.png (36.46 KB, 下载次数: 0)

下载附件  保存到相册

2019-11-11 17:50 上传

下载图片文件夹示例.png

python示例.png (31.78 KB, 下载次数: 0)

下载附件  保存到相册

2019-11-11 17:48 上传

运行效果图

运行效果图

版权声明:

本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。

有关影视版权:本站只供百度云网盘资源,版权均属于影片公司所有,请在下载后24小时删除,切勿用于商业用途。本站所有资源信息均从互联网搜索而来,本站不对显示的内容承担责任,如您认为本站页面信息侵犯了您的权益,请附上版权证明邮件告知【754403226@qq.com】,在收到邮件后72小时内删除。本文链接:https://www.piaodoo.com/7722.html

搜索