urllib库
是Python中一个最基本的网络请求库,可以模拟浏览器行为,向指定的服务器发送请求,接收数据。
urlopen函数
向服务器发送请求,并接收返回值。基本使用:
from urllib import request
resp = request.urlopen('http://www.baidu.com')
print(resp.read().decode())
urlopen函数常用参数:
- url: 请求的url
- data: 请求的data。urlopen默认使用get请求,如果传递了data参数,则变成post请求。
- 返回值:是一个http.client.HTTPResponse对象,该对象是一个类文件句柄对象,可以使用read(size)、readline、readlines以及getcode等方法。
urlretrieve函数
向服务器发送请求,接收返回的数据并保存到文件。常用于下载图片等文件。
常用的有两个参数: 一个是url,是网页请求的地址;另一个是filename,是保存下载内容的文件路径和文件名。如果有需要,还可以象urlopen一样使用data参数。
from urllib import request
request.urlretrieve("http://www.baidu.com", "baidu.html")
urlencode函数
如果url中包含了中文或其它特殊字符,就必须进行编码。urlencode可以把字典数据转换为URL编码的数据。
from urllib import request, parse
base_url = 'http://www.baidu.com/s?'
params = {'name':'张三','age':18,'greet':'hello world'}
q_string = parse.urlencode(params)
print(q_string)
url = base_url + q_string
输出结果:
name=%E5%BC%A0%E4%B8%89&age=18&greet=hello+world
parse_qs函数
可以将经过编码后的url参数进行解码。
from urllib import parse
qs = "name=%E5%BC%A0%E4%B8%89&age=18&greet=hello+world"
data = parse.parse_qs(qs)
print(data)
输出结果:
{'name': ['张三'], 'age': ['18'], 'greet': ['hello world']}
urlparse和urlsplit函数
都是用来解析请求url的,urlparse的结果比urlsplit的结果多了一个params,path项的内容也不一样。
from urllib import parse, request
url = "http://www.baidu.com/s;hello?wd=python&username=abc#1"
result1 = parse.urlparse(url) # 多了个params参数
print(result1)
result2 = parse.urlsplit(url)
print(result2)
输出结果:
ParseResult(scheme='http', netloc='www.baidu.com', path='/s', params='hello', query='wd=python&username=abc', fragment='1')
SplitResult(scheme='http', netloc='www.baidu.com', path='/s;hello', query='wd=python&username=abc', fragment='1')
request.Request类
如果想要在请求的时候增加一些请求头,可以使用request.Request类来实现。比如要增加一个User-Agent,示例代码如下:
from urllib import request
url = 'https://www.lagou.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
req = request.Request(url, headers=headers)
resp = request.urlopen(req)
print(resp.read().decode())
ProxyHandler处理器(代理):
- 代理的原理:在请求目的网站之前,先请求代理服务器,由代理服务器去请求目的网站,拿到目的网站数据后,再转发给我们。
- http://httpbin.org: 这个网站可以方便的查看http请求的一些参数。
- 在代码中使用代理:
- 使用
urllib.request.ProxyHandler
,传入一个代理,这个代理是一个字典,字典的key依赖于代理服务器能够接收的类型,一般是http
或https
,值是ip:port
。 - 使用上一步创建的
handler
,以及request.build_opener
创建一个opener
对象。 - 使用上一步创建的
opener
,调用open
函数,发起请求。
- 使用
示例代码如下:
from urllib import request
#网页地址
url = 'http://httpbin.org/ip'
#创建handler
handler = request.ProxyHandler({'http':'223.241.78.43:8010'})
#创建opener
opener = request.build_opener(handler)
#打开网页,返回网页内容
resp = opener.open(url)
#打印网页内容
print(resp.read().decode())
网友评论