Python爬虫使用实例-umei

优美图库 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 parselBASE_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_encodingselector = 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).contentwith 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 urlheaders = {'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_encodingselector = 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' + hrefhref_data = requests.get(href,headers=headers).textimg = 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).contentdata1 = requests.get(url1, headers=headers)data1.encoding = data1.apparent_encodingselector = parsel.Selector(data1.text)img_url = selector.css('.big-pic img::attr(src)').get()img_data= requests.get(img_url, headers=headers).contentimg_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.rhkb.cn/news/429329.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯【物联网】零基础到国奖之路:十. OLED

蓝桥杯【物联网】零基础到国奖之路:十.OLED 第一节 硬件解读第二节 MDK配置 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fa7660b81be9407aa19c603561553db0.png)第三节 代码 第一节 硬件解读 OLED硬件知识: 第二节 MDK配置 第三节 代码 include头文件。 编…

Vue3 中组件传递 + css 变量的组合

文章目录 需求效果如下图所示代码逻辑代码参考 需求 开发一个箭头组件&#xff0c;根据父组件传递的 props 来修改 css 的颜色 效果如下图所示 代码逻辑 代码 父组件&#xff1a; <Arrow color"red" />子组件&#xff1a; <template><div class&…

VM-Ubantu中使用vscode头文件报错——解决办法

问题 系统中头文件明明存在但是却报错 解决方法 在报错的文件中点击&#xff0c;shift ctrl p选择Edit Configurations(JSON) 修改文件内容 原文件内容 修改之后的内容 {"configurations": [{"name": "Linux","includePath":…

https加密原理

以为http的数据都是以明文传送&#xff0c;会有很大的安全问题&#xff0c;所以出现的https协议。https就是在http协议的基础上增加了一个安全层&#xff0c;可以对数据进行加密和解密(例如SSL、TLS等)。 https加密解密的原理&#xff1a;证书非对称加密对称加密 在讲解原理前…

你了解system V的ipc底层如何设计的吗?消息队列互相通信的原理是什么呢?是否经常将信号量和信号混淆呢?——问题详解

前言&#xff1a;本节主要讲解消息队列&#xff0c; 信号量的相关知识。 ——博主主要是以能够理解为目的进行讲解&#xff0c; 所以对于接口的使用或者底层原理很少涉及。 主要的讲解思路就是先讨论消息队列的原理&#xff0c; 提一下接口。 然后讲解ipc的设计——这个设计一些…

QT打包--windeployqt执行,运行程序提示缺少库

执行windeployqt.exe D:\Data\code\QtCode\Release\RegularExp\RegularExp.exe 生成相应的dll动态库 执行RegularExp.exe&#xff0c;出错&#xff1a;“由于找不到libgcc_s_seh-1.dll…” 找到安装的qt对应的libgcc_s_seh-1.dll拷贝到RegularExp.exe同级目录下&#xff0c; 执…

Qt 窗口事件机制

在 Qt 开发中&#xff0c;窗口的关闭、隐藏、显示等事件是常见且重要的功能。不同的事件触发条件、处理方式不同&#xff0c;了解和掌握这些事件有助于我们更好地控制窗口行为。本文将详细讲解这些事件的使用方法&#xff0c;并通过代码实例来展示其应用。 1. done(int r) — 关…

嵌入式C语言自我修养:GNU C编译器扩展语法精讲

在Linux内核的源码中&#xff0c;你会发现许多这样的“奇特”代码。它们看起来可能有点陌生&#xff0c;但它们实际上是C语言的一种扩展形式&#xff0c;这种扩展在C语言的标准教材中往往不会提及。这就是为什么你在阅读Linux驱动代码或内核源码时&#xff0c;可能会感到既熟悉…

写一下线性表

如果你是c语言, "不会"c, 那么... 把iostream当成stdio.h 把cout当成printf, 不用管啥类型, 变量名字一给输出完事 把cin>>当成scanf, 变量名字一给输入完事 把endl当成\n, 换行. 哦对了, malloc已经不建议使用了, 现在使用new, 把new当作malloc, 把delete当…

【工具变量】科技金融试点城市DID数据集(2000-2023年)

时间跨度&#xff1a;2000-2023年数据范围&#xff1a;286个地级市包含指标&#xff1a; year city treat post DID&#xff08;treat*post&#xff09; 样例数据&#xff1a; 包含内容&#xff1a; 全部内容下载链接&#xff1a; 参考文献-pdf格式&#xff1a;https://…

【JVM】概述

前言 Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java类库、Java编程语言及许许多多的第三方Java框架&#xff08;如Spring、MyBatis等&#xff09;构成。在国内&#xff0c;有关Java类库API、Java语言语法及第三方框架的技术资料和书籍非常丰富&…

Spring Boot蜗牛兼职网:全栈开发

第4章 系统设计 4.1 系统体系结构 蜗牛兼职网的结构图4-1所示&#xff1a; 图4-1 系统结构 登录系统结构图&#xff0c;如图4-2所示&#xff1a; 图4-2 登录结构图 蜗牛兼职网结构图&#xff0c;如图4-3所示。 图4-3 蜗牛兼职网结构图 4.2开发流程设计 系统流程的分析是通…

抖音短视频矩阵系统OEM源码开发注意事项,功能开发细节流程全揭秘

抖音短视频矩阵系统OEM源码开发注意事项,功能开发细节流程全揭秘 在当今数字化时代背景下&#xff0c;短视频产业正经历前所未有的快速发展。其中&#xff0c;抖音凭借其创新的算法及多元内容生态获得巨大成功&#xff0c;吸引了众多用户。对于意欲进入短视频领域的创业者而言&…

移动技术开发:ListView水果列表

1 实验名称 ListView水果列表 2 实验目的 掌握自定义ListView控件的实现方法 3 实验源代码 布局文件代码&#xff1a; activity_main.xml: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.androi…

springboot注册和注入组件方式概览

IoC&#xff1a;Inversion of Control&#xff08;控制反转&#xff09; 控制&#xff1a;资源的控制权&#xff08;资源的创建、获取、销毁等&#xff09; 反转&#xff1a;和传统的方式不一样了 DI &#xff1a;Dependency Injection&#xff08;依赖注入&#xff09; 依赖&…

国人卖家可折叠无线充电器发起TRO专利维权,功能相同可能侵权

案件基本情况&#xff1a;起诉时间&#xff1a;2024-8-5案件号&#xff1a;2024-cv-22971原告&#xff1a;SHANGXING TECHNOLOG (SHENZHEN) CO., LTD原告律所&#xff1a;Rubio & Associates, P.A.起诉地&#xff1a;佛罗里达州南部法院涉案商标/版权&#xff1a;原告品牌简…

信息安全数学基础(19)同余式的基本概念及一次同余式

一、同余式概念 同余式是数论中的一个基本概念&#xff0c;用于描述两个数在除以某个数时所得的余数相同的情况。具体地&#xff0c;设m是一个正整数&#xff0c;a和b是两个整数&#xff0c;如果a和b除以m的余数相同&#xff0c;则称a和b模m同余&#xff0c;记作a≡b(mod m)。反…

计算机视觉的应用34-基于CV领域的人脸关键点特征智能提取的技术方法

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用34-基于CV领域的人脸关键点特征智能提取的技术方法。本文主要探讨计算机视觉领域中人脸关键点特征智能提取的技术方法。详细介绍了基于卷积神经网络模型进行人脸关键点提取的过程&#xff0c;包括使…

Linux相关概念和重要知识点(5)(权限的修改、时间属性)

1.权限的修改 &#xff08;1&#xff09;提权行为 普通用户是会受到权限的限制&#xff0c;但root账户无视一切权限限制&#xff0c;因此当我们要获取更高的权限&#xff0c;有一种办法就是将自己变成root或者短暂拥有和root一样的权力。 普通用户 -> root &#xff1a;s…

人工智能有助于解决 IT/OT 集成安全挑战

思科的一项研究表明&#xff0c;信息技术 (IT) 和运营技术 (OT) 融合所带来的安全问题可以通过人工智能 (AI) 解决&#xff0c;尽管该技术也可能被恶意行为者利用。 该报告由思科和 Sapio Research 联合发布&#xff0c;对 17 个国家的 1,000 名行业专业人士进行了调查&#x…