Python爬虫 urllib -- urllib 下载资源urllib 请求对象的定制(URL完整组成介绍HTTP协议和HTTPS的区别请求对象的定制)
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫 urllib -- urllib 下载资源urllib 请求对象的定制(URL完整组成介绍HTTP协议和HTTPS的区别请求对象的定制)相关的知识,希望对你有一定的参考价值。
1. urllib下载资源
将爬取到的数据下载到本地,例如视频,音频,图片等等。
下载的方法是urllib.request.urlretrieve(url,fileName)
,retrieve是取回的意思
- 参数url表示的是数据的url地址
- 参数fileName表示的是保存到本地的文件名称。
1.1 爬取网页
import urllib.request
# 下载网页
url_page = 'http://www.baidu.com'
# url代表的是下载的路径 filename文件的名字
urllib.request.urlretrieve(url_page,'baidu.html')
运行结果:
1.2 下载图片
我们先随便找一张图片,把他的地址复制下来粘贴到代码里面。
import urllib.request
# 下载图片
url_img = 'https://pics6.baidu.com/feed/b8389b504fc2d56245acdea47bb57fe677c66c05.jpeg?token=e0948e44a83229ba8592ceb2c4aabd0a'
urllib.request.urlretrieve(url=url_img, filename='lisa.jpg')
运行结果:
1.3 下载视频
我们先随便找一个视频,把他的地址复制下来粘贴到代码里面。
import urllib.request
# 下载视频
url_video = 'https://vd2.bdstatic.com/mda-nbp6kyb4qregqe54/cae_h264_delogo/1645677730287219925/mda-nbp6kyb4qregqe54.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1645888128-0-0-8552835ddf00392f44ac4a593486485c&bcevod_channel=searchbox_feed&pd=1&cd=0&pt=3&logid=2328564026&vid=15492421551603095689&abtest=100815_2-17451_2-3000220_3&klogid=2328564026'
urllib.request.urlretrieve(url_video, '俄罗斯乌克兰局势.mp4')
运行结果:
2. urllib 请求对象的定制
UA介绍:User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服
务器能够识别客户使用的操作系统 及版本、CPU 类型、浏览器及版本。浏览器内核、
浏览器渲染引擎、浏览器语言、浏览器插件等
2.1 URL完整组成介绍:
2.2 HTTP协议和HTTPS的区别:HTTPS更加安全
- HTTP协议:HTTP协议也就是超文本传输协议,是一种使用明文数据传输的网络协议。一直以来HTTP协议都是最主流的网页协议,HTTP协议被用于在Web浏览器和网站服务器之间传递信息,以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。
- HTTPS协议:为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。这样,就算数据被第三者所截获,但是由于数据是加密的,所以你的个人信息仍然是安全的。这就是HTTP和HTTPS的最大区别。
http使用的是80端口,https使用的是443端口
2.3 请求对象的定制
我们先去复制百度的UA,然后粘贴到代码里面。
import urllib.request
url = 'https://www.baidu.com'
# url的组成
# https://www.baidu.com/s?wd=周杰伦
# http/https www.baidu.com 80/443 s wd = 周杰伦 #
# 协议 主机 端口号 路径 参数 锚点
# http 80
# https 443
# mysql 3306
# oracle 1521
# redis 6379
# mongodb 27017
headers =
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
# 因为urlopen方法中不能存储字典 所以headers不能传递进去
# 请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf8')
print(content)
运行结果:
说明:UA是模仿从游览器发起的请求,这样才可以获取完整的数据,下面演示不定制请求对象的情况
为什么获取到的数据这么少,原因是https协议是一个更加安全的协议,UA就是其中一种反爬的手段。如果请求没有携带UA,则获取到的数据不完整。
以上是关于Python爬虫 urllib -- urllib 下载资源urllib 请求对象的定制(URL完整组成介绍HTTP协议和HTTPS的区别请求对象的定制)的主要内容,如果未能解决你的问题,请参考以下文章