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的区别请求对象的定制)的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫Urllib库的基本使用

python爬虫

python爬虫之urllib库

Python爬虫从入门到进阶之urllib库的使用

python爬虫基础02-urllib库

python爬虫---urllib库的基本用法