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/web/80.shtml

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

相关文章

57、通过EEG数据的SHAPE变化,揭开EEG-TCNet的黑匣子[看好了小子,我只教这一次]

之前在第18篇博客中对于EEG-TCNet这个处理EEG信号的sota模型进行了介绍,也给出了模型,目前也是全网对于EEG-TCNet浏览度最高的文章了,我觉得讲的已经很细致了,没想到还是有不少同学疑问,这也是全网缺少该模型pytorch代…

3D Gaussian Splatting技术原理

3D Gaussian Splatting 是一种用于体积渲染的技术,特别适用于科学和医学可视化。这种技术使得用户能够以一种直观的方式查看和分析三维数据集,如医学成像数据(MRI、CT扫描)或科学模拟数据。 技术原理 3D Gaussian Splatting基本上是一种将3D空间中的点数据转换成一个连续…

Redis中的Sentinel(五)

Sentinel 检测主观下线状态 在默认情况下,Sentinel会以每秒一次的频率向所有与它创建了命令连接的实例(包括主服务器、从服务器、其他Sentinel在内) 发送PING命令,并通过实例返回的PING命令回复来判断实例是否在线。如图所示,带箭头的连线显…

Word学习笔记之奇偶页的页眉与页码设置

1. 常用格式 在毕业论文中,往往有一下要求: 奇数页右下角显示、偶数页左下角显示奇数页眉为每章标题、偶数页眉为论文标题 2. 问题解决 2.1 前期准备 首先,不论时要求 1、还是要求 2,这里我们都要做一下设置: 鼠…

如何封装Vue组件并上传到npm

前言 环境准备 1.注册npm账号:npm | Home (npmjs.com) 2.保证当前环境安装了vue、webpack、node,以下工作将在该环境下进行(没有的小伙伴自行百度安装哈~) 3.一下用到的环境版本 webpack:v5.1.4node:v…

SAM5716B 法国追梦DREAM 音频DSP芯片

法国追梦/DERAM SAM5504/5704/5716/5808音频DSP芯片,开发板,方案 可用于电子鼓、电子琴、电吉他、效果器、均衡器、啸叫抑制器等电声产品领域 全系列芯片: SAM2634 SAM2695 SAM5504B SAM5704B SAM5708B SAM5808B SAM5716B SAM5916B... 原厂开发…

根据状态转移图实现时序电路

描述 某同步时序电路的状态转换图如下,→上表示“C/Y”,圆圈内为现态,→指向次态。 请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。 如图所示: 电路的接口如下图所示,C是单bit数据…

密码学 | 承诺:常见的承诺方案

🥑原文:密码学原语如何应用?解析密码学承诺的妙用 - 知乎 1 简介 密码学承诺 涉及 承诺方、验证方 两个参与方,以及以下两个阶段: 承诺阶段:承诺方选择一个敏感数据 v v v,为它计算出相应…

【Jupyter Notebook】快捷键

在命令模式下,单元格边框是灰色(缺省)的。这些快捷键主要用于操作单元格。 Enter:进入编辑模式Shift Enter:运行当前单元格并选中下一个单元格Ctrl Enter:运行当前单元格Alt Enter:运行当前单…

Mac多媒体播放器 Movist Pro v2.11.4中文激活版下载

Movist Pro for Mac是一款专业的媒体播放器,特别为Mac用户设计。它不仅界面简洁美观,而且功能强大,能满足用户各种播放需求。 Movist Pro v2.11.4中文激活版下载 首先,Movist Pro for Mac支持多种媒体文件的播放,包括视…

关于Qt主窗口的菜单部件

前言 在介绍主窗口的两大部件之前,我们要先知道关于主窗口的一些知识。 主窗口 一个主窗口可以没有菜单条、工具条、状态条,但必须设置中心部件。在 Q 生成的 C头文件 ui_mainwindow.h 代码中,我们可以看到以下代码: centralWidget new Qwidget(MainWi…

CSS基础常用属性之颜色(如果想知道CSS的颜色知识点,那么只看这一篇就足够了!)

前言:在我们学习CSS的时候,主要学习选择器和常用的属性,而这篇文章讲解的就是最基础的属性——颜色。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 目录 1.颜色属性 【1】使用颜色关键词表…

fatal error C1001: An internal error has occurred in the compiler

VS2008驱动项目A,集成一个Wzarid生成的驱动LIB项目B,在编译64位驱动时,出现以下错误: 1>------ Build started: Project: xxxx, Configuration: Release x64 ------ 1>Linking... 1>fatal error C1001: An internal error has occu…

怎么在 Spring 服务响应时控制响应时间?

在Spring应用程序中控制服务响应时间是确保系统性能和用户体验的关键方面之一。在处理请求时,响应时间是指从客户端发送请求到服务端返回响应所花费的时间。 在某些情况下,需要对响应时间进行控制,以确保系统能够及时响应用户请求&#xff0…

springboot中mongodb连接池配置-源码分析

yml下spring.data.mongodb 以前mysql等在spring.xxx下配置,现在springboot新版本(小编3.2.3)在spring.data.xxx下了,如下所示,mongodb的配置在spring.data.mongodb下: 连接池相关参数配置-源码分析 拼接在…

改进下记录学习的小网站

Strong改进 结束:2024-4-14 打算投入:10h 实际消耗:12h 3m 学习总是不在状态。 我的时间花得很零散,也有点茫然。所以想尝试一下集中式地、一块一块地花,比如投入30个小时,去干一件事,这样就可…

现在期权开户佣金最低的证券公司是哪家?1.7元/张是真的吗?

期权开户的要求主要包括以下几个方面: 1. **资金要求**:在申请开户时,保证金账户可用资金余额需要不低于人民币50万元。这是为了确保投资者有足够的资金来应对期权交易的风险。 2. **交易经验**:投资者需要具备股指期货交易经验&…

Vue的虚拟DOM是什么

核心思想 虚拟DOM/Virtual DOM,是数据驱动视图的一种解决方案。核心思想:使用 js对象的形式来表现html的dom结构。 背景 由于现代网络和浏览器的发展,网页的内容也变得很复杂,ajax 诞生让用户可以在不刷新页面的条件下获取到数…

Jackson知识点记录

文章目录 一.Jackson模块说明 二.ObjectMapper基本功能使用ObjectMapper的一些核心方法:示例代码1. 序列化示例2. 反序列化示例3. JsonNode 处理示例 高级配置 三.各种Node1. ObjectNode2. ArrayNode3. ValueNode4. MissingNode示例 一.Jackson Jackson 库主要分为…

Java面试:算法常用面试题汇总

1.说一下什么是二分法?使用二分法时需要注意什么?如何用代码实现? 二分法查找(Binary Search)也称折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较&…