Python爬虫使用实例-umei

news2024/9/21 18:31:24

优美图库 www.umei.cc
BV1Ag41137re

1/获取资源

查看网站资源结构

主页

有多页

多页,每个item只有一张图

是图片集合

多页,每个item都是一个图集

最大页码
内外层图集均有若干page。
通过尾页按钮确定pageNum:
在这里插入图片描述


2/发送请求

response = requests.get(url=url, headers=headers)
response.encoding = response.apparent_encoding # 识别编码, 防止中文乱码
data = response.text

3/数据解析

在这里插入图片描述

selector.xpath('//div[@class="item masonry_brick"]/div/div/a/@href')

因为这里取第一个得到的信息不多(第一个在前面),所以取最后一个
在这里插入图片描述

img.xpath('//div[@class="pages"]/ul/li[last()]/a/@href').extract()

正则提取链接中的两个参数
[‘/meinvtupian/meinvxiezhen/311996_81.htm’]

re.compile(r'\d+').search(img_last[0]).group() # 311996
re.search(r'\d+', img_last[0].split('/')[-1]).group() # 81

4/保存数据

saved_folder = 'mzt\\'
if not os.path.exists(saved_folder):
    os.mkdir(saved_folder)
with open(saved_folder + img_name, 'wb') as f:
    print('正在保存:', img_name )
    f.write(img_data)

🥝 建文件夹

os.mkdir

saved_folder = 'mzt1\\'
if not os.path.exists(saved_folder):
    os.mkdir(saved_folder)

使用 os.makedirs 来创建文件夹,以便能够创建多级文件夹。
exist_ok参数设置为True时,可以自动判断当文件夹已经存在就不创建

saved_folder = 'mzt1\\'
os.makedirs(saved_folder, exist_ok=true)

🥝 添加延时

导入time模块,使用 time.sleep 添加请求间隔。
当请求数据过快过多时,可能会返回空的响应,添加延时可以很好地解决这一问题。

5/ 代码实现

优美图库导航栏下有一个home和8个list_item(nav-li-item),8个list_item下又分别设置若干子列表。将这些子列表看作外层图集outter,将外层图集中的一张图片打开后又得到子页面,这一层图中又有1~若干张图片,将这层图看作内层图片们inner,在outter外层图集列表得到的是缩略图,而在内层得到的是分辨率更高的图像。比如:

https://umei.ojbkcdn.com/file/bizhi/20220930/0dd0mr2fhzf.jpg # 外层获取的 缩略图
https://umei.ojbkcdn.com/file/bizhi/20220930/xls1xfyzme2.jpg # 内层获取的 高清图

🥝 缩略图

外层的多页的

import os
import re
import time
import requests
import parsel

BASE_URL = 'https://www.umei.cc/bizhitupian/diannaobizhi/index_{}.htm'

def get_page_num(url):
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.139 Safari/537.36'}
    response = requests.get(url, headers=headers)
    response.encoding = response.apparent_encoding
    selector = parsel.Selector(response.text)
    last_page_href = selector.css('div #pageNum a::attr(href)').getall()[-1]
    return int(re.search(r'\d+', last_page_href.split('_')[-1]).group())

def download_image(href, name, folder='diannaobizhi'):
    if not os.path.exists(folder):
        os.makedirs(folder)
    file_extension = os.path.splitext(href)[1] or '.jpg'
    file_name = os.path.join(folder, f"{name}{file_extension}")
    image_data = requests.get(href).content
    with open(file_name, 'wb') as f:
        f.write(image_data)
    print(f'正在保存:{name}')

def main():
    url = BASE_URL.format(2)
    page_num = get_page_num(url)

    for page in range(1, page_num + 1):
        print(f'--------- 正在爬取第{page}页的内容 ----------')
        url = BASE_URL.format(page) if page > 1 else url
        headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.139 Safari/537.36'}
        response = requests.get(url, headers=headers)
        response.encoding = response.apparent_encoding
        selector = parsel.Selector(response.text)

        for li in selector.css('.item_t a'):
            href = li.css('img::attr(data-original)').get()
            name = li.css('img::attr(alt)').get()
            if name and href:
                download_image(href, name)
                time.sleep(5)  # 添加延迟

if __name__ == "__main__":
    main()

在这里插入图片描述

🥝 高清图

外层的单页里面的图集

import os
import re
import requests
import parsel
# 优美图库 www.umei.cc
# 1. 获取资源
url = 'https://www.umei.cc/meinvtupian/meinvxiezhen/'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.139 Safari/537.36',}
# 2. 发送请求
response = requests.get(url=url, headers=headers)
response.encoding = response.apparent_encoding # 识别编码, 防止中文乱码
data = response.text
#print(data)
# 3. 数据解析
# 3.1 转换数据类型
selector = parsel.Selector(data)
# 3.2 数据提取
href_list = selector.xpath('//div[@class="item masonry_brick"]/div/div/a/@href').extract()
#print(href_list)
for href in href_list:
    href='https://www.umei.cc' + href
    href_data = requests.get(href,headers=headers).text
    img = parsel.Selector(href_data)
    img_last = img.xpath('//div[@class="pages"]/ul/li[last()]/a/@href').extract()
    #print(img_last)
    #img_last_url = 'https://www.umei.cc' + img_last[0]
    num = re.search(r'\d+', img_last[0]).group()
    page_num = re.search(r'\d+', img_last[0].split('_')[-1]).group()
    #img_src=[url+f'{num}.htm']
    #img_data = [requests.get(img_src, headers=headers).content] # 获取数据
    for page in range(1, int(page_num)+1):
        if page == 1:
            url1 = url+f'{num}.htm'  # 请求地址
        else:
            url1 = url+f'{num}_{page}.htm'  # 请求地址
        #img_last_data = requests.get(img_last_url, headers=headers).content
        data1 = requests.get(url1, headers=headers)
        data1.encoding = data1.apparent_encoding
        selector = parsel.Selector(data1.text)
        img_url = selector.css('.big-pic img::attr(src)').get()
        img_data= requests.get(img_url, headers=headers).content
        img_name = selector.css('.big-pic img::attr(alt)').get()+ img_url.split('/')[-1]
        # 4. 保存数据
        saved_folder = 'mzt\\'
        if not os.path.exists(saved_folder):
            os.mkdir(saved_folder)
        with open(saved_folder + img_name, 'wb') as f:
            print('正在保存:', img_name )
            f.write(img_data)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速将Mongo Compass的shell语句转成java代码

步骤一、从MongoCompass中获取java代码 将java代码复制出来&#xff0c;从MongoCompass中复制的java代码基本格式如下&#xff1a;&#xff08;是Bson原生格式&#xff09; List<Document> list Arrays.asList(new Document("$match",new Document("name…

探索视频美颜SDK与直播美颜工具的开发实践方案

直播平台的不断发展&#xff0c;让开发出性能优异、效果自然的美颜技术&#xff0c;成为了技术团队必须面对的重要挑战。本篇文章&#xff0c;小编将深入讲解视频美颜SDK与直播美颜工具的开发实践方案。 一、视频美颜SDK的核心功能 视频美颜SDK是视频处理中的核心组件&#xf…

Cocos Creator3.x设置动态加载背景图并且循环移动

效果图 项目结构 项目层级结构&#xff1a; 预制&#xff1a; 代码 import { _decorator, CCFloat, Component, Node, Sprite, instantiate, Prefab, assert } from cc; const { ccclass, property } _decorator;/*** 背景脚本*/ ccclass(Background) export class Backg…

2024年华为杯研赛(D题)数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

反激电路中TL431光耦反馈参数的计算,环路设计思路

反馈的过程 当副边的输出电压升高时&#xff0c;TL431参考端电压&#xff08;R端&#xff09;电压也会升高&#xff0c;使得TL431的导通量增加&#xff0c;同时光耦内部的发光二极管流过的电流也会增大&#xff0c;进而使得光耦三极管导通量增加&#xff0c;相连的电源IC电压反…

《粮油与饲料科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《粮油与饲料科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定 学术期刊。 问&#xff1a;《粮油与饲料科技》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;中文天地出版传媒集团股份有限公司…

缺陷及缺陷管理(复习)

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 今日目标 能够说出缺陷的判定标准 能够说出描述缺陷的6大核心内容 能够描述缺陷状态、严重程度、优先级的作用 能够按照提供的缺陷模版完成一个缺陷的提交 能够说出缺陷的跟踪流程 能够在禅道中提交测…

黑神话:悟空配置推荐,升级显卡还是ToDesk云电脑

虽然距离《黑神话&#xff1a;悟空》上线已有一个月的时间&#xff0c;但该游戏在国内外市场仍然火热&#xff0c;想要玩好、玩顺它着实是需要花费一些心力的。除了操作上的经验、技巧&#xff0c;用高配置电脑设备来实现无疑是最为关键的要素之一。那么如若现有机型性能不足&a…

2024年华为杯数学建模研赛(C题) 建模解析| 磁芯损耗建模 | 小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮2000人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决研赛的难关呀。 完整内容可…

(学习总结18)C++多态

C多态 一、多态的概念二、多态的定义及实现多态的构成条件1. 实现多态的两个必须条件&#xff1a;2. 虚函数3. 虚函数的重写/覆盖4. 多态场景的一个选择题5. 虚函数重写的一些其他问题协变析构函数的重写 6. override 和 final 关键字7. 重载/重写/隐藏的对比 三、纯虚函数和抽…

【堆栈操作基本规则】假设SS的初值为2000H,SP初值为0200H,在执行了5次入栈操作和2次出栈操作后SP的内容为多少?写出计算过程。

欢迎来到我的技术博客&#xff01; &#x1f389; 这里不仅有满满的编程干货和学习资源&#xff0c;我的某站账号也为你准备了更多实用的技术视频和知识分享。 &#x1f449; 点击关注我的小破站账号&#xff0c;获取更多编程技巧和学习资源&#xff01; 小破站主页 我们来逐…

新手入门:小程序架构快速上手

目录 新建项目和配置 项目基本结构 新建小程序页面 修改项目首页 全局配置 窗口 tabBar 页面配置 小程序基本语法 wxml 数据绑定 条件渲染 列表渲染 wxss wxss 对比 css rpx import 全局样式和局部样式 js wxs 数据请求 get和post请求 小程序和跨域 小程…

C++进阶 set和map讲解

set 和 map set 和 multiset set set 类的介绍 set 是基于红黑树实现的有序容器。它的插入、删除、查找操作的时间复杂度均为 O(log n)。遍历时&#xff0c;set 的迭代器按照中序遍历&#xff0c;因此它总是以升序排列元素。 set 的声明如下&#xff0c;T 表示 set 的关键字类…

The First项目报告:变革全链身份,Layer3的未来价值解读

2024年7月5日&#xff0c;代币分发协议 Layer3 基金会公布代币 L3 经济模型&#xff0c;以任务平台为市场切入点的 Layer3 聚合了市场上花样繁多的项目&#xff0c;帮助用户实现通过一个平台交互全链项目的操作。乘着牛市的浪潮&#xff0c;各链生态重新火热&#xff0c;Layer3…

微服务_入门1

文章目录 一、 认识微服务二、 微服务演变2.1、 单体架构2.2、 分布式架构2.3、 微服务2.4、 微服务方案对比 三、 注册中心3.1、 Eureka3.2、 Nacos3.2.1、服务分级存储模型3.2.2、权重配置3.2.3、环境隔离 一、 认识微服务 二、 微服务演变 随着互联网行业的发展&#xff0c;…

Java项目实战II基于Java+Spring Boot+MySQL的洗衣店订单管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着生活节奏的加快&#xff0c;现代人对便捷、高效服务的需求日益增长&#xff0c;洗衣店作为日常生…

[Linux] Linux操作系统 进程的状态

标题&#xff1a;[Linux] Linux操作系统 进程的状态 个人主页&#xff1a;水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、前置概念的理解 1.并行和并发 2.时间片 3.进程间具有独立性 4.等待的本质 正文开始&#xff1a; 在校的时候&#xff0c;你一定学过《…

【自然语言处理】补充:词项权重计算及向量空间模型

【自然语言处理】补充:词项权重计算及向量空间模型 文章目录 【自然语言处理】补充:词项权重计算及向量空间模型1. 排序式检索2. 词项频率3. tf-idf权重计算4. 向量空间模型1. 排序式检索 布尔检索的不足:结果过少或者过多 布尔查询常常会是过少(=0)或者过多(>1000)在…

Python “函数” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中函数的一些题目&#xff0c;方便学习完Python的函数之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的函数&#xff0c;推荐…

[Python数据可视化]探讨数据可视化的实际应用:三个案例分析

数据可视化是理解复杂数据集的重要工具&#xff0c;通过图形化的方法&#xff0c;可以直观地展示信息、趋势和模式。本文将深入探讨三个实际案例&#xff0c;包括健康数据分析、销售趋势分析、城市交通流量分析。每个案例将提供假设数据、详细注释的代码及分析结果。 案例 1: …