Python 爬虫学习笔记(二)urllib下载图片和视频

2023-10-30

一、urllib的1个类型和6个方法

1. response的类型

我们打印一下urllib.request方法获取的response是什么类型

import urllib.request

url = "http://www.baidu.com"

response = urllib.request.urlopen(url)

print(type(response))

结果是’HTTPResponse类型,暂且记住,是为了和之后的requests库区分开。
在这里插入图片描述

2. 6个方法

6个方法都是对response而言的:

  1. response.read() :特点是一字节一字节去读,效率低
content = response.read()  # 全部读取

content = response.read(5) # 表示只读前5个字节
  1. response.readline() :读取(第)一行
content = response.readline()
  1. response.readlines() :读取所有行,列表储存(类似文件的读取)
content = response.readlines() # 返回的是列表
  1. response.getcode():获取状态码
print(response.getcode()) # 返回200表示访问成功,逻辑正确
  1. response.geturl():获取url地址
print(response.geturl())  # 基本没什么用
  1. response.getheaders():获取状态信息(响应头)
print(response.getheaders()) # 列表类型,元素都是元组形式

二、使用urllib进行下载

用到的函数是urllib.request.urlretrieve(url=?,filename=?)

参数url即我们要下载的资源的url地址,filename即我们要保存到本地的文件名。

下面分别以下载网页、图片和视频为例:

1. 下载网页
url_page = "http://www.baidu.com"

urllib.request.urlretrieve(url_page, 'baidu.html')

运行上述代码后,在项目目录下发现多了’baidu.html’,下载成功
在这里插入图片描述

2. 下载图片

以网络图片为例,如图复制图片url地址
在这里插入图片描述

url_img = "https://img2.baidu.com/it/u=3998891405,3474278461&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500"

urllib.request.urlretrieve(url_img, 'jenny.jpg')

运行上述代码后,在项目目录下发现多了’jenny.jpg’,下载成功
在这里插入图片描述
大家可能和我有一样的疑问,手动下载它不香吗?

我总结的原因如下:

  1. 当需要下载的图片特别多时,例如成千上万,手动下载肯定比不上程序
  2. 我们往往得不到资源的url,没有办法直接手动下载。爬取后的解析操作为的就是获取有用的信息,例如想要下载图片的url。
3. 下载视频

以网络视频为例,F12获取视频下载的src
在这里插入图片描述

url_video = "https://vd4.bdstatic.com/mda-ncabdxs3k2mkjq3g/sc/cae_h264_delogo/1646986556076827915/mda-ncabdxs3k2mkjq3g.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1647146550-0-0-a2c5e5ba902195ad44640e87df20b352&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0750870118&vid=12970100849765423858&abtest=100815_2-17451_1&klogid=0750870118"

urllib.request.urlretrieve(url_video, 'video.mp4')

运行上述代码后,在项目目录下发现多了’video.mp4’,下载成功, 并且能正常播放。
在这里插入图片描述
全部代码:

import urllib.request

# 下载网页
url_page = "http://www.baidu.com"

urllib.request.urlretrieve(url_page, 'baidu.html')

# 下载图片
url_img = "https://img2.baidu.com/it/u=3998891405,3474278461&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500"

urllib.request.urlretrieve(url_img, 'jenny.jpg')

# 下载视频
url_video = "https://vd4.bdstatic.com/mda-ncabdxs3k2mkjq3g/sc/cae_h264_delogo/1646986556076827915/mda-ncabdxs3k2mkjq3g.mp4?v_from_s=hkapp-haokan-tucheng&auth_key=1647146550-0-0-a2c5e5ba902195ad44640e87df20b352&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=0750870118&vid=12970100849765423858&abtest=100815_2-17451_1&klogid=0750870118"

urllib.request.urlretrieve(url_video, 'video.mp4')

总结

  1. 通过urllib.request.urlopen()获取到的response是HTTPResponse类型,要和后面的requests库区分开。
  2. urlretrieve的两个参数分别是下载资源的url,和下载资源的命名。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 爬虫学习笔记(二)urllib下载图片和视频 的相关文章

  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • 类的 IPython 表示

    我正在使用我创建的模块尝试 IPython 但它没有显示类对象的实际表示 相反 它显示类似的内容 TheClass module TheClass name I heavily在这个模块中使用元类 我有真正有意义的类表示 应该向用户显示 是
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 Matplotlib 饼图周围绘制箭头以将每个标签指向圆圈中各自的部分?

    我一直在用 Matplotlib 绘制一些图表 我有一个饼图 想要在图表周围绘制箭头 使每个标签都指向图表 我有一个例子 这是我当前的代码 import matplotlib pyplot as plt plt rcParams font
  • VSCode Settings.json 丢失

    我正在遵循教程 并尝试将 vscode 指向我为 Scrapy 设置的虚拟工作区 但是当我在 VSCode 中打开设置时 工作区设置 选项卡不在 用户设置 选项卡旁边 我还尝试通过以下方式手动转到文件 APPDATA Code User s
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并

随机推荐

  • 液晶面板中的OD

    OD OVER DRIVE 过驱动 作用 提升 液晶响应时间 对于从黑到白和白到黑无补偿作用响应时 原理 液晶分子在电场中所产生的力矩与电场的平方成正比 因此 增加电场可以大幅度增加对液晶分子施加的力矩 从而加速液晶分子的转动 这就是电场加
  • Qt信号层次太多

    一 先说需求 可能是五层 或多层 子对象要发信号给第一层 这样 如果正常写很麻烦 二 解决方案 专门拿 出一个类 做为中转类 中转类为单例 子类 将信号 发给中转类 中转类 再发给写要的类 上代码 中转类 ifndef TRANSMITSI
  • RS232电平、CMOS电平、TTL电平是什么,区别是什么?

    RS232电平 CMOS电平 TTL电平是什么 区别是什么 什么是TTL电平 CMOS电平 RS232电平 它们有什么区别呢 一般说来 CMOS电平比TTL电平有着更高的噪声容限 1 TTL电平标准 输出 L lt 0 8V H gt 2
  • python中二维数组的切片

    对于一维数组或者列表 a 切片的规则是 b a start stop step 对于二维数组类似 当我们对某个维度切片时 把更细分的维度看作整体即可
  • 【Java】 已知一个数组 arr[] = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索引,并在控制台输出找到的索引值。

    import java util Scanner public class Test04 public static void main String args 定义一个数组 用静态初始化完成数组元素的初始化 int arr 19 28 3
  • tqdm循环中实时更新进度条的文字(描述)部分

    tqdm是一个显示进度条的工具 可以在使用for循环的时候添加一个tqdm 这样就知道程序的实时进度 tqdm github页面 https github com tqdm tqdm 示例代码 from tqdm import tqdm i
  • 解决Word、Excel启动时提示向程序发送命令出现问题

    还记得突然有一天 打开Excel或者word后 总是提示 向程序发送命令出现问题 那时候很郁闷 不知道什么问题 重启电脑等方法都没用 然后度娘查找 最后才发现是因为按照额外程序导致的 以下详细说说前因后果 以Excel为例 遇到这种问题应该
  • Python中的连续比较运算符(与C语言对比)

    在Python中 连续的比较运算符是允许的 但是在C语言中是编译不会报错 但是不建议这样使用 Python代码 gt gt gt 5 gt 3 lt 4 True gt gt gt 6 gt 3 lt 1 True 在Python中这两行表
  • 常见的js代码调试

    这里主要探讨使用浏览器来调试javascript方法 并且仅对于IE 对于Opera7 Mozilla FireFox Netscape Navigator等浏览器偶在开发过程中用的很少 没有太多经验 在此就不予探讨 工具的安装 在安装of
  • thymeleaf基本语法

    thymeleaf基本语法 Spring Boot整合Thymeleaf 模版 依赖 创建模板文件 定义页面 简单表达式 Thymeleaf 常用语法 定义局部变量 注释 标准注释 析器级注释 取值 拼接 内联表达式 th inline 字
  • 简单理解磁盘结构

    本文首发于 Guanngxu 的个人博客 磁盘到底是怎样工作的 一文理解硬盘结构 数据库系统总会涉及到辅助存储 大多都是磁盘 因为它们能够存储大量需要长期保存的数据 因此我们有必要先了解了解磁盘的相关知识 根据机械原理 存储器的容量越大其速
  • Mybatis-Plus 实现多表联合查询+分页+查询条件

    Mybatis plus 自己只能完成单表操作 所以如果想要实现多表 需要借助 Mybatis 实现 首先引入mybatis plus依赖 这里就不演示了 返回结果集封装 传递分页以及查询的参数 主要代码在 Service 中 Reques
  • 若依微服务报错Error: Cannot find module ‘html-webpack-plugin‘解决

    遇到的问题 Error Cannot find module html webpack plugin 但是已经有html webpack plugin了 还是提示了报错 解决办法 https gitee com y project RuoY
  • LeetCode每日刷题:合并两个有序数组

    题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你 合并 nums2 到 nums1 中 使合并后的数组同样按 非递减顺序 排列 注意
  • LightGBM原理介绍

    简介 是GBDT模型的一个进化版本 其主要思想是利用弱分类器 决策树 迭代训练以得到最优模型 该模型具有训练效果好 不易过拟合等优点 备注 容易出现过拟合的风险 需要限制树的最大深度来防止过拟合 LGB是一个实现GBDT算法的框架 支持高效
  • Python学习笔记(三)

    文章目录 1 异常 2 单测 3 读写文件 3 1 读文件 3 2 写文件 3 3 操作文件和目录 4 正则表达式 4 1 贪婪匹配 5 其它 5 1 StringIO BytesIO 5 2 序列化 5 2 1 pickle 5 2 2
  • 3D光照阴影 平面阴影矩阵推导及代码实现

    3D光照阴影 平面阴影矩阵推导及代码实现 参考有关知识于是辛苦几个小时 推导出光照 平面阴影转换矩阵见图片 平面阴影矩阵推导第一页 平面阴影矩阵推导第二页 平面阴影矩阵 具体代码实现 第三页 到这里光照阴影的平面矩阵推导结束还有伪代码 参考
  • 如何使用学生账号来激活使用Jetbrains全家桶

    使用 edu邮箱注册学生账号来激活使用JetBrains全家桶 起因 之前激活过Jetbrains家的IDE 升级到2017 3 3版本 提示又要激活 试着原来的方法 结果用来激活的License Server全都失效 据称搭建本地反向代理
  • obj[‘x‘]和obj[x]的区别

    对象数据类型 由零到多组键值对 属性名和属性值 组成的属性名的类型 说法一 属性名类型只能是字符串或者Symbol 说法二 属性名类型可以是任何基本类型值 处理中可以和字符串互通 但是属性名绝对不能是引用数据类型 如果设置引用类型 最后也是
  • Python 爬虫学习笔记(二)urllib下载图片和视频

    一 urllib的1个类型和6个方法 1 response的类型 我们打印一下urllib request方法获取的response是什么类型 import urllib request url http www baidu com res