http协议:超文本传输协议,是一种发布和接收HTML页面的方法,服务器端口号是80端口号
https协议:是http协议的加密版本,在http下加入了SSL层。服务器端口号是443端口
常见的请求的Method
在http协议中,定义了八种请求方法,这里介绍常用的两种:分别是get请求和post请求
1.get请求:一般情况下,只从服务器获取数据下来,并不会对服务器资源产生任何影响的时候会用get请求
2.post请求:向服务器发送数据(登陆),上传文件等,会对服务器资源产生影响的时候会使用post请求
urllib库----内置的库
urllib库是python中一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据
urllib函数
urlopen():
创建一个表示远程的url的类文件对象,然后像本地文件一样操作这个类文件对象来获取远程数据
1.url:请求的url
2,data: 请求的data,如果设置了这个值,那么将变成post请求
3,返回值:返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象,有read(size),readline(),readlines()以及getcode()等方法。
使用:
from urllib import request
url =‘http://XXXX’
res = request.urlopen(url)
可以通过read(),readline(),readlines()来读取res返回的数据,getcode()是获取返回的http状态码。
urlretrieve函数
这个函数可以方便的将网页上的一个文件保存到本地。
urlretrieve(url,文件的名称)
以下代码可以非常方便的将百度的首页下载到本地:
from urllib import request
request.urlretrieve(‘http://www.baidu.com/’,‘百度.html’)
urllib库中的编码和解码
urlencode(),parse_qs()
urlencode()可以把字典数据转换成URL编码的数据。
parse_qs()可以将编码后的url参数进行解码的操作
from urllib import parse
data ={‘name’:‘老王’,‘age’:18,‘greet’:‘hello world’}
res = parse.urlencode(data) #编码
print(res)
qs =parse.parse_qs(res) # 解码
以上代码是演示编码和解码,结果可以自己运行查看。
对字符串的编码
quote()
例如: a =‘蜡笔小新’
urllib库中的解析函数
urlpase()和urlsplit()可以用来将一个url中的各个组成部分进行分割,urlparse和urlsplit的功能上基本一摸一样,唯一不一样的是urlparse里面有params属性,而urlsplit没有这个params属性。
urllib库中的request中的Request
request.Request类用于网络请求,可以增加请求头,如果想要在请求的时候增加一些请求头,那么就必须使用request.Request类来实现。比喻要请求一个User-Agent
PorxyHandler处理器(代理设置)
很多网站会检测某段时间某个IP的访问次数(通过流量统计,系统日志等)如果次数多的不像正常人,它就会禁止这个IP的访问。
http://httpbin.org:查看http请求的一些参数。
代理的原理:
在请求目的网站之前,先请求代理服务器,然后代理服务器去请求目标网站,代理服务器拿到目的网站的数据后,再转发给我们的代码。
使用代理的方法:
1 ,使用Proxyhandler,传入代理构建一个handler
2,使用上面的handler构建一个opener
3,使用opener去发送一个请求
示例:
# 使用代理:
# 步骤:
# 1,使用ProxyHandler,传入代理构建一个handler
handler=request.ProxyHandler({
'http':'193.112.113.26:1080'})
# 2.使用上面创建的handler构建一个opener
opener = request.build_opener(handler)
# 3,使用opener去发送一个请求
res=opener.open(req)
# res = urllib.request.urlopen(req)
html = res.read()
return html
if __name__=='__main__':
url ='http://httpbin.org/ip'
html= url_open(url)
print(html