当前位置: 首页 > news >正文

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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • php环境搭建教程
  • Linux快速安装ClickHouse
  • P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪
  • Iframe窗口通信
  • CentOS上使用Mosquitto实现Mqtt主题消息发布和订阅mqtt主题消息连同时间戳记录到文件
  • 爬虫的流程
  • 【Docker】Docker 常见问题及解决方案
  • MyBatis-Plus 分页插件
  • Gitee基本指令操作
  • 华硕电脑用U盘方式重装系统
  • 【iOS】push和pop、present和dismiss
  • 记某学校小程序漏洞挖掘
  • 13年408计算机考研-计算机网络
  • 深度解读 2024 Gartner DevOps 魔力象限
  • 基于YOLOv5s的无人机航拍输电线瓷瓶检测(附数据集与操作步骤)
  • 5、React组件事件详解
  • Debian下无root权限使用Python访问Oracle
  • ECS应用管理最佳实践
  • Spring Cloud Feign的两种使用姿势
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 正则表达式小结
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ‌内网穿透技术‌总结
  • # .NET Framework中使用命名管道进行进程间通信
  • #nginx配置案例
  • #QT 笔记一
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (7)STL算法之交换赋值
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (vue)页面文件上传获取:action地址
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (回溯) LeetCode 131. 分割回文串
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (十六)串口UART
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)3D模板阴影原理
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net core 6.0 升8.0
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .Net中的集合
  • @angular/cli项目构建--http(2)
  • @Autowired和@Resource的区别
  • @EnableAsync和@Async开始异步任务支持
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [AI Google] 使用 Gemini 取得更多成就:试用 1.5 Pro 和更多智能功能
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [ASP]青辰网络考试管理系统NES X3.5
  • [BJDCTF2020]The mystery of ip1
  • [BSidesCF 2019]Kookie1
  • [BUUCTF 2018]Online Tool(特详解)
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)