urllib库:网络请求,url编码,url分解,反爬虫(请求头、代理、cookie)

本文介绍了Python的urllib库在网络请求中的应用,包括使用request模块发送请求和保存网页,参数的url编码与解码,url的解析与分解,设置请求头,使用代理IP以及Cookie的处理。通过示例代码展示了如何使用urllib进行网络请求,如伪造User-Agent,设置代理服务器,以及保存和加载Cookie到本地文件。
摘要由CSDN通过智能技术生成

urllib库是Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据。

通常 网页请求、下载保存网页(图片)、参数编码、解码 会用到这个库
事实上这个库不经常用,一般都是用requests库,requests是urllib更高级的封装,使用起来非常方便,但urllib还是要了解一下的,知其所以然。

发送请求-保存网页文件(图片):使用urllib下的request

在Python3的urllib库中,所有和网络请求相关的方法,都被集到urllib.request模块下面了

from urllib import request    # 导入库

request.urlopen()方法用法:发送请求 模拟访问网页

resp = request.urlopen('http://www.baidu.com')
# 参数1是请求的url地址;参数data=是post提交参数,默认None(get方式),request.urlopen(url, data)

获取响应信息

request.urlopen()方法返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象。有read(size)、readline、readlines以及getcode等方法。

# 返回的是文件句柄对象
print(resp.read())          # 读取所有内容(字节)
print(resp.read(10))        # 读取十个字节
print(resp.readline())      # 读取一行
print(resp.readlines())     # 读取所有,以列表方式显示
print(resp.getcode())       # 返回状态码

request.urlretrieve()方法用法:下载保存网页(图片)

这个方法可以方便的将网页上的一个文件保存到本地

request.urlretrieve('http://imgpic.gmw.cn/dt/2012-02/15/20120215143812_3131.jpg', r'C:\Users\Administrator\Desktop\123.jpg')
# 将一张图片保存了下来

request.urlretrieve('https://www.baidu.com', r'C:\Users\Administrator\Desktop\baidu.html')
# 将百度首页保存为html文件

# 参数1是请求的url地址;参数2是保存的路径

参数的编码解码

from urllib import parse    # 导入urllib下的parse:url编码-解码模块

parse.urlencode()方法

作用:url编码,可以把字典表数据转换成url编码数据,并对中文进行utf-8编码

用浏览器发送请求的时候,如果url中包含了中文或者其他特殊字符,浏览器会自动进行编码。而如果使用代码发送请求,就必须手动的进行编码,这时候就应该使用urlencode方法来实现。urlencode可以把字典数据转换为URL编码的数据。

params = {
   'name': '张三', 'age': 19, 'greet': 'hello world'}
result = parse.urlencode(params)
url = 'http://image.so.com/i?'
params = {
   'q': '刘德华'}
qs = parse.urlencode(params)

url = url + qs

response = request.urlopen(url)
print(response.read())

在Python中,post的参数需要先进行url编码,再使用encode转换成字节码

encode() 编码 将字符串转换成字节码
decode() 解码 将字节码转换成字符串

encode和decode是Python中的编码解码,和url编码不是一个东西,是Python在传输数据时需要进行的编码,而url编码是浏览器和网站服务器交互时,需要进行的编码

data = {
   
    'd': 1,
    'dd': '2',
    'a': 'ddd',
    'c': '中文'
}

# url编码
print(parse.urlencode(data))    # d=1&dd=2&a=ddd&c=%E4%B8%AD%E6%96%87


# 一般使用urllib post的时候需要对参数进行这种编码
# 先url编码 而后再编码成字节码 因为Python提交数据的时候是以字节码形式提交的
print(parse.urlencode(data).encode('utf-8'))   # b'd=1&dd=2&a=ddd&c=%E4%B8%AD%E6%96%87'

# 使用requests模块一律不需要编码 提交参数的时候直接提交data这种键值对就行了
# requests后面文章会说到
print('啦啦啦123abc'.encode('utf-8'))
# b'\xe5\x95\xa6\xe5\x95\xa6\xe5\x95\xa6123abc'
# 不进行url编码,直接对中文encode编码,结果是这种\x开头的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值