python爬虫 - 下载图片

文章目录

    • 1、下载图片示例1:使用 .urlretrieve() 函数
    • 2、下载图片示例2 - 使用 open/write 函数
    • 3、下载图片示例3
      • 3.1 使用 open/write 下载
      • 3.2 使用 urlretrieve下载

爬虫的本质:模拟对应的App,浏览器访问对应的地址获取到数据

1、下载图片示例1:使用 .urlretrieve() 函数

urlretrieve() 方法直接将远程数据下载到本地。下面我们再来看看 urllib 模块提供的 urlretrieve() 函数。


Help on function urlretrieve in module urllib:urlretrieve(url, filename=None, reporthook=None, data=None)
import requestsfrom lxml import etree
from urllib import requestmy_url_test = 'https://www.huya.com/g/4079'url_response_data = requests.get(my_url_test)response_status = url_response_data.status_code
print(f"url_response_data_text : [{response_status}]")
if response_status != 200:   # 应答码为200,表示:查询成功print("download failed")
else:# 通过.text 可以获取到当前网页 返回的一手数据url_response_data_text = url_response_data.text# print(f"url_response_data_text : [{url_response_data_text}]")# 通过 .HTML 可以对原始数据进行清洗(解析)url_response_data_eTreeHtml = etree.HTML(url_response_data_text)print(f"url_response_data_eTreeHtml : [{url_response_data_eTreeHtml}]")# 通过 .xpath() 函数,可以从一手数据中筛选所有以 img class=‘pic‘开头的图片代码块url_response_data_pics = url_response_data_eTreeHtml.xpath('//img[@class="pic"]')print(f"url_response_data_pics : [{url_response_data_pics}]")for i in url_response_data_pics:print(f"url_response_data_pic_src1 : [{i.xpath('./@data-original')}]")print(f"url_response_data_pic_name1: [{i.xpath('./@alt')}]")pic_path = i.xpath('./@data-original')[0]pic_name = i.xpath('./@alt')[0]# 下载到本地request.urlretrieve(pic_path, r'./test001_down/'+pic_name+".jpg")

运行结果:
在这里插入图片描述

2、下载图片示例2 - 使用 open/write 函数

from lxml import etree
import requests
import os
if __name__=="__main__":url='https://pic.netbian.com/4kyouxi/'headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'}response=requests.get(url=url,headers=headers)response.encoding='gbk'#图片名称乱码时的处理方式page_text=response.texttree=etree.HTML(page_text)li_list=tree.xpath('//div[@class="slist"]/ul/li')if not os.path.exists('./4K游戏'):os.mkdir('./4K游戏')for li in li_list:img_src='http://pic.netbian.com'+li.xpath('./a/img/@src')[0]img_name=li.xpath('./a/img/@alt')[0]+'.jpg'img_data=requests.get(url=img_src,headers=headers).contentimg_path='4K游戏/'+img_namewith open(img_path,'wb') as fp:fp.write(img_data)print(img_name,"下载成功")

在 Python 中使用文件的关键函数是 open() 函数。

open() 函数有两个参数:文件名和模式。

有四种打开文件的不同方法(模式):

  • “r” - 读取 - 默认值。打开文件进行读取,如果文件不存在则报错。
  • “a” - 追加 - 打开供追加的文件,如果不存在则创建该文件。
  • “w” - 写入 - 打开文件进行写入,如果文件不存在则创建该文件。
  • “x” - 创建 - 创建指定的文件,如果文件存在则返回错误。

此外,您可以指定文件是应该作为二进制还是文本模式进行处理。

  • “t” - 文本 - 默认值。文本模式。
  • “b” - 二进制 - 二进制模式(例如图像)。

在这里插入图片描述虽然 open 函数也能实现文件的下载保存,但不建议使用IO操作,容易出现问题, for循环执行效率要快于with open的效率。

3、下载图片示例3

3.1 使用 open/write 下载


from lxml import etree
import requests
from urllib import requesturl = 'http://www.haoduanzi.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
}
url_content = requests.get(url, headers=headers).texttree = etree.HTML(url_content)div_list = tree.xpath('//div[@id="main"]/div')[2:-1]i = 0
for div in div_list:img_url = div.xpath('./div/img/@src')[0]img_content = requests.get(url=img_url, headers=headers).contentrequest.urlretrieve(url=img_url, filename='img' + str(i) + '.jpg')i += 1

3.2 使用 urlretrieve下载


from lxml import etree
import requests
from uuid import uuid4
import time
from urllib import requesturl = 'http://www.haoduanzi.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
}
url_content = requests.get(url, headers=headers).texttree = etree.HTML(url_content)div_list = tree.xpath('//div[@id="main"]/div')[2:-1]
filename = uuid4()
# i = 0
for div in div_list:img_url = div.xpath('./div/img/@src')[0]img_content = requests.get(url=img_url, headers=headers).content# request.urlretrieve(url=img_url, filename='img' + str(i) + '.jpg')# i += 1time.sleep(2)with open(r'C:\jupyter\day02\%s.jpg' % filename, 'wb') as f:f.write(img_content)

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

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

相关文章

考虑预同步的虚拟同步机T型三电平逆变器并离网MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 三相 T 型三电平逆变器电路如图所示,逆变器主回路由三个单相 T 型逆变器组成。 直流侧输入电压为 UPV,直流侧中点电位 O 设为零电位,交流侧输出侧是三相三线制连…

高防虚拟主机的重要性

在当今数字化时代,网络安全已经成为企业和个人必须面对的重要议题。随着网络攻击手段的不断升级和多样化,传统的虚拟主机已经难以满足日益增长的安全需求。在这样的背景下,高防虚拟主机应运而生,成为保护网站安全、抵御网络攻击的…

4.双向循环链表的模拟实现

1.双向链表的实现 1.1双向链表节点的结构声明 typedef int LTDataType;typedef struct ListNode {struct ListNode* prev; // 指向该节点的前一个节点struct ListNode* next; // 指向该节点的后一个节点LTDataType data; // 该节点中存储的数据 }LTNode; // 将这…

Linux内核errno-base.h源码分析

上次写过一个博客,主要关于内核错误相关的源码分析(链接),最近突然发现上次的分析不完善,因此本次完善相关分析。 Linux内核中经常见到一些返回值,如-12,比如下面是我遇到过的一个截图&#xff…

【Java面试题】MySQL上篇(索引)

文章目录 索引1.索引的分类?2.B树和B树的区别?2.1B树2.2B树 3.为什么使用索引会加快查询?4.创建索引的注意点?5.索引在哪些情况下会失效?6.聚簇索引和非聚簇索引的区别?7.回表查询是什么?8.什么…

阿里云租用服务器GPU配置报价单_1年_一个月_1小时价格表

阿里云GPU服务器租用价格表包括包年包月价格、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡,GPU云服务器gn6i可享受3折优惠,阿里云服务器网aliyunfuwuqi.com分享阿里云GPU…

机器学习—概述(一)

什么是机器学习 数据 模型 预测 从历史数据当中获得规律?这些历史数据是怎么的格式? 数据集构成 特征值+目标值 机器学习算法分类 监督学习 目标值:类别一分类问题 k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归目标值:连续型的数据一回归问题 线性回…

电脑磁盘空间不足?学会这几招,轻松释放磁盘空间

随着科技的飞速发展,电脑已成为我们日常生活中不可或缺的一部分。无论是工作、学习还是娱乐,我们都需要依赖电脑来完成。然而,随着电脑使用时间的增长,磁盘空间不足的问题也逐渐浮现。当磁盘空间不足时,不仅会影响电脑…

2023年金融贷款骗局套路之一

源地址:2023年金融贷款骗局套路之一_预防网贷套路_计算机技术网 随着无卡消费的日夜流行,三年疫情出现,钱难寻,难找的尴尬境地,贷款骗局也出现不少。今天我们讲讲最近很流行的贷款骗局之一中的一种贷款骗局。 在平常…

AIoT人工智能物联网之AI 实战

1. jetson-inference 入门 jetson-inference是官方推出的体验套件,提供了三种最常见的AI应用于计算机视觉的类型,imagenet用于 图像辨识 ( Image Recognition )、detectNet用于对象辨识 ( Object Detection )、segNet用于语义分割 可以先使用windows下载 jetson-inference(因…

第40篇:有限状态机<三>

Q:本期我们介绍有限状态机的应用之一:摩尔状态机“1101”序列检测器。 A:当检测到序列1101时,状态机输出为1。定义s_0为初始状态(即没有检测到1输入的状态),摩尔状态机的输出仅取决于现态&…

基于SpringBoot+Vue的个性化推荐电商平台(源码+文档+部署+讲解)

一.系统概述 随着网络科技的不断发展以及人们经济水平的逐步提高,网络技术如今已成为人们生活中不可缺少的一部分,而信息管理系统是通过计算机技术,针对用户需求开发与设计,该技术尤其在各行业领域发挥了巨大的作用,有…

数学建模-Matlab中randperm函数及其双重进阶版

1.randperm函数的用法 (1)这种用法就是参数只有一个数字,代表的含义就是随机排列之后打印输出; 我们举例的数字是4,就会把1到4这4个数字随机打乱之后随机输出,每次运行结果都不一样 所有可能的情况是n的…

UI自动化测试案例

备注:本文为博主原创文章,未经博主允许禁止转载。如有问题,欢迎指正。 个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力) 笔记目录:笔记本~笔记目录_airtest和selenium那个好用-CSDN博客 个人随笔:工作总结随笔_8、以前工作中都接触过哪…

鸿蒙南向开发:【智能烟感】

样例简介 智能烟感系统通过实时监测环境中烟雾浓度,当烟雾浓度超标时,及时向用户发出警报。在连接网络后,配合数字管家应用,用户可以远程配置智能烟感系统的报警阈值,远程接收智能烟感系统报警信息。实现对危险及时报…

Java区域基层卫生云联his系统源码 医院信息管理系统源码

基于云计算的医疗卫生信息系统(cloud-based healthcare informationsystem,简称“云 HIS”)是基于云计算技术,将医院信息系统、电子病历系统、实验室信息系统、公共卫生等系统横向集成的系统,为医疗机构信息化建设提供标准化、信息化、协同化…

思维题,LeetCode 2923. 找到冠军 I

一、题目 1、题目描述 一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。 给你一个下标从 0 开始、大小为 n * n 的二维布尔矩阵 grid 。对于满足 0 < i, j < n - 1 且 i ! j 的所有 i, j &#xff1a;如果 grid[i][j] 1&#xff0c;那么 i 队比 j 队 强 &a…

003Node.js创建第一个web服务

如果用PHP来编写后端代码&#xff0c;需要用Apache或者Nginx的服务器,来处理客户的请求响应。对于Node.js时&#xff0c;不仅实现了应用&#xff0c;同时还实现了整个HTTP服务器. 安装 Node Snippets插件&#xff08;编程自带提示&#xff09; console.log(你好nodejs); //表…

代理模式:控制对象访问的智能方式

在面向对象的软件开发中&#xff0c;代理模式是一种结构型设计模式&#xff0c;它为其他对象提供一个代理或占位符以控制对这个对象的访问。代理模式在实现权限控制、延迟初始化和远程对象访问等方面非常有用。本文将详细介绍代理模式的定义、实现、应用场景以及优缺点&#xf…