Python爬虫文件下载图文教程
作者:fangjun123fj 发布时间:2023-11-18 23:59:03
而今天我们要说的内容是:如果在网页中存在文件资源,如:图片,电影,文档等。怎样通过Python爬虫把这些资源下载下来。
1、怎样在网上找资源:
就是百度图片为例,当你如下图在百度图片里搜索一个主题时,会为你跳出一大堆相关的图片。
还有如果你想学英语,找到一个网站有很多mp3的听力资源,这些可能都是你想获取的内容。
现在是一个互联网的时代,只要你去找,基本上能找到你想要的任何资源。
2、怎样识别网页中的资源:
以上面搜索到的百度图片为例。找到了这么多的内容,当然你可以通过手动一张张的去保存,但这样做既费力又费事。你当然更希望通过程序自动去下载所找到的资源。要想代码识别这些资源,就要告诉代码这些资源有哪些特征,怎样在网页中找到它们。
打开浏览器的调试功能(不同浏览器可能有差别,不知道的百度一下吧)。找出网页中你想要下载资源的路径,如下图所示。如果有许多类似资源需要下载,则要找到识别这些资源地址的规律,然后告诉代码。
3、资源下载方法一:
代码很简单,直接上代码:
from urllib.request import urlretrieve
urlretrieve("图片URL", "./image.jpg")
直接通过urlretrieve函数就把URL对应的图片给下载到当前文件夹(./)中了,并把图片命名为image.jpg。
4、资源下载方法二:
还是直接看代码:
import requests
resource = requests.get("图片URL")
with open("./image.jpg", mode="wb") as fh:
fh.write(resource.content)
此下载方法要安装python的requests库。从功能上来说与下载方法一是一样的。python库的安装方法用pip就好。很简单,这里都不啰嗦了。
5、资源下载方法三:
看代码:
import requests
resource = requests.get("图片URL", stream=True)
with open("./image.jpg", mode="wb") as fh:
for chunk in resource.iter_content(chunk_size=100):
fh.write(chunk)
此方法与下载方法二的不同之处在于在get方法调用时使用了参数【stream=True】。而在写入的文件的时候是分块写入的。
什么意思呢:
前两种方法是把一个文件全部下载到内存后,再一起写入到硬盘文件中。
方法三是下载一定的量(这里指的是100字节)后,就写入到硬盘文件中,直到全部写完。
第三种方法的好处是,如果在下载大容量文件时,不会造成内存的过度使用。
6、资源下载说明一:
上述的代码都是通过下载图片资源为例子的,但所有其它资源,如文档,电影等的下载方式是一样的。关键是要正确的识别出网页中资源所对应的URL地址才能够正确的下载(因为有些资源是用的相对路径或加密后的路径)。
7、资源下载说明二:
上面例子中的代码都是下载单一资源的。如果要在同一网页中下载多个资源的思路如下:
1. 找出要下载资源的URL,并形成一个资源集合;
2. 把下载函数中的资源URL与保存路径参数化;
3. 遍历资源集合,依靠循环调用下载函数来达到多个资源下载的目的。
总结:以上就是本次介绍关于Python爬虫下载文件的所有知识点内容,感谢大家的阅读。
来源:https://jingyan.baidu.com/article/aa6a2c1487632d0d4c19c4ab.html
猜你喜欢
- Python 字符串描述Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格).语法rstrip()方法语法
- 数据的合并与关联是数据处理过程中经常遇到的问题,在SQL、HQL中大家可能都有用到 join、uion all 等 ,在 Pandas 中也
- 1、使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES; +----------+
- 前言在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数、统计用户总数等。一般我们会使用MySQL 的count函数进行统计
- 前言在文档对象模型 (DOM) 中,每个节点都是一个对象。DOM 节点有三个重要的属性 :1. nodeName : 节点的名称2. nod
- 什么是序列化与反序列化这里引入微软对序列化的解释:序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主
- 一、背景:nginx 的log 不会自动按天备份,而且记录时间格式不统一,此程序专门解决这两个问题;二、windows 部署方式1.在 ng
- 本文实例讲述了django框架自定义模板标签(template tag)操作。分享给大家供大家参考,具体如下:django 提供了丰富的模板
- 最近做百度地图的模拟数据,需要获取某条公交线路沿途站点的坐标信息,貌似百度没有现成的API,因此做了一个模拟页面,工具而已,IE6/7/8不
- 近期接手越来越多的东西,发布和运维的工作相当机械,加上频率还蛮高,导致时间浪费还是优点多。修复bug什么的,测试,提交版本库(2分钟),ss
- 本文实例为大家分享了微信小程序定时拍照的具体代码,供大家参考,具体内容如下在某些进行签到的场景,为了防止用户选择相册的照片或者不实时拍照,设
- 前置条件确保mysql的版本是5.7+一、新建mysql表增加json字段二、pojo类package com.cxstar.domain;
- 本文实例讲述了JS自定义混合Mixin函数。分享给大家供大家参考,具体如下:<script type="text/javas
- 更轻量- 出色的颗粒化模块,子模块划分;- 延迟加载;- 强调代码重用(公共基类、插件、扩展);更易用- 统一的API;- 便利(each,
- 引言很多人可能没有注意过,在 Go(甚至是大部分语言)中,一条普通的赋值语句其实不是一个原子操作。例如,在32位机器上写int64类型的变量
- 是时候了—— 在大部分情况下当用户输入密码时把它们用清晰的文字显示出来。一直以来,提供反馈、把系统状态形象化是最基本的可用性原则,当用户输入
- //采用对象冒充的方式实现js继承 function A(color) { this.Acolor = color; this.AshowC
- 在web开发中经常遇到多关键词对对单个字段查询,我一般是通过动态数组来实现的。当然多个关键词的一般是用空格或,隔开,我这几假设多个关键词用空
- python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手。python爬虫微博根据微博存在于不同媒介上,
- 谈到用户界面交互总少不了事件,前面一系列文章介绍的鼠标光标、坐标、弹出式提示框等实现的底层其实都是事件处理,只不过matplotlib或其他