用python爬虫下载美女图片_分类

举报
Nikolas 发表于 2020/11/30 09:27:36 2020/11/30
【摘要】 如果我们想要做一个猫狗分类模型,首先我们就要有大量的猫狗图片。我们可以去网上找那些公开的数据集,如果没有,那么我们就要自己去收集这些图片,这个时候爬虫就是一个很好的工具。本文只是做一个教学案例供大家学习使用,切勿用于商业用途!

# # 1.导入依赖包

import re
import os
import time
import random
import requests
from lxml import etree


# # 2.获取url

def get_url(url):
    # 伪造请求头
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
    }
    # 请求网页
    res = requests.get(url, headers=headers)
    #设置休眠时间
    time.sleep(random.randint(1, 3))
    res.encoding = 'gbk'
    html = etree.HTML(res.text)
    page = html.xpath('//dd[@class="page"]/a/@href')[-1]
    page = page.split('.')[0]
    page = page.split('_')[-1]
    link = html.xpath('//dd[@class="page"]/a/@href')[0]
    link = link.split('.')[0]
    link = link[:-1]
    link_list = [url]
    for i in range(2, int(page) + 1):
        u = url + link + str(i) + '.html'
        link_list.append(u)
    for u in link_list:
        parse_url(u)


# # 3.解析url

def parse_url(u):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
    }
    res = requests.get(u, headers=headers)
    #设置休眠时间
    time.sleep(random.randint(1, 3))
    res.encoding = 'gbk'
    res = etree.HTML(res.text)
    nodes = res.xpath('//dl[@class="list-left public-box"]/dd/a[@target="_blank"]/@href')
    names = res.xpath('//dl[@class="list-left public-box"]/dd/a[@target="_blank"]/img/@alt')
    for name, node in zip(names, nodes):
        path = 'mnfl/' + name + '1.jpg'
        print(path)
        if os.access(path, os.F_OK):
            print("图片已经存在")
            pass
        else:
            print(node)
            get_pic(node)


# # 4.获取图片

def get_pic(node):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
    }
    # print(link)
    res = requests.get(node, headers=headers)
    #设置休眠时间
    time.sleep(random.randint(1, 3))
    res.encoding = 'gbk'
    page = re.findall('>共(.*?)页<', res.text)[0]
    res = etree.HTML(res.text)
    img_link = res.xpath('//div/a/img/@src')[0]
    name = res.xpath('//div[@class="content"]/h5/text()')[0]
    base_url = img_link.split('/')
    url = base_url[:-1]
    url = '/'.join(url)
    for i in range(1, int(page) + 1):
        img_link = url + '/' + str(i) + '.jpg'
        save_img(node, img_link, name, i)


# # 5.保存图片

def save_img(link, img_link, name, i):
    headers = {
        'Referer': link,
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
    }
    img = requests.get(img_link, headers=headers)
    #设置休眠时间
    time.sleep(random.randint(1, 3))
    if not os.path.exists('mnfl'):
        os.mkdir('mnfl')
    path = 'mnfl/' + name + str(i) + '.jpg'
    print(path)
    if os.access(path, os.F_OK):
        print("图片已经存在")
    else:
        try:
            with open(path, 'wb') as f:
                f.write(img.content)
                print('图片存储成功')
        except:
            print('图片存储失败')


def main():
    # 想要哪个分类直接把'qingchun'改为其他类即可
    # url = 'https://www.mm131.net/qingchun/'
    # get_url(url)
    # 如果要爬取所有的类,注释上面两行,运行下面代码
    url_list = ['xinggan', 'qingchun', 'xiaohua', 'chemo', 'qipao', 'mingxing']
    for i in url_list:
        url = 'https://www.mm131.net/' + i + '/'
        get_url(url)

if __name__ == '__main__':
    main()

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。