1. urlopen( ) 方法
用于打开一个远程的url连接,并且向这个连接发出请求,获取响应结果。返回的结果是一个http响应对象,这个响应对象中记录了本次http访问的响应头和响应体
urllib.request.urlopen 参数介绍:
urllib.request.urlopen( url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
import urllib.request url = 'https://www.python.org' # 方式一 response = urllib.request.urlopen(url) print(type(response)) #
# 方式二 request = urllib.request.Request(url) res = urllib.request.urlopen(url) print(type(res)) #
print(response.status) # 200 获取响应状态码 print(response.reason) # OK print(response.version) # 11 print(response) # 获取响应,结果为:
print(response.headers) # 获取响应头 # Server: nginx # Content-Type: text/html; charset=utf-8 # X-Frame-Options: DENY # Via: 1.1 vegur # Via: 1.1 varnish # Content-Length: 48830 # Accept-Ranges: bytes # Date: Thu, 12 Mar 2020 10:34:07 GMT print(response.url) # https://www.python.org 获取响应url print(response.read()) # 获取响应体 二进制字符串 print(response.read().decode("utf-8")) # 对响应体进行解码 # 按行读取 print(response.readline()) # 读取一行 print(response.readline()) # 读取下一行 print(response.readlines()) # 读取多行。得到一个列表 每个元素是一行
2、添加data参数的时候就是以post请求方式请求,若没有data参数就是get请求方式
from urllib import request, parse # 用parse模块,通过bytes(parse.urlencode())可以将post数据进行转换并放到 # urllib.request.urlopen的data参数中。这样就完成了一次post请求。 data = bytes(parse.urlencode({'word': 'hello'}), encoding='utf8') response = request.urlopen('http://httpbin.org/post', data=data) print(response.read())
3、timeout参数使用
import urllib.request response = urllib.request.urlopen('http://httpbin.org/get', timeout=1) print(response.read()) # 正常结束,控制台显示:socket.time : timed out response = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1) print(response.read()) # 超时,控制台显示:urllib.error.URLErrot :
4、Request(url=url, data=data, method=’POST’) 方法
web开发中,同一个url往往可以对应若干套不同的数据(或者界面,如手机、电脑),后台可以根据发起请求的前端的用户代理的不同,而决定应该给前端做出什么样的响应,如果检测到没有用户代理可以拒绝访问。
有很多网站为了防止程序爬虫爬网站造成网站瘫痪,会需要携带一些headers头部信息才能访问,最长见的有user-agent参数所以需要伪装请求头,去访问目标站。
urllib.ruquest.Request 参数介绍:
urllib.ruquest.Request(url=url,headers=headers,data=data,method=’POST’)
headers 参数使用;给请求添加头部信息,定制自己请求网站时的头部信息,使得请求伪装成浏览器等终端
url = "http://www.baidu.com/" req = request.Request(url=url, headers={'UserAgent':'Mozilla/5.0 (Windows NT 10.0; Win64;x64)AppleWebKit/537.36 (KHTML, likeGecko)Chrome/71.0.3578.80Safari/537.36'}) res = request.urlopen(req) # 用加入了请求头的请求对象发起请求 print(res.status) # 打印状态码
添加请求头的post请求方式
from urllib import request, parse url = 'http://httpbin.org/post' headers = { 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)', 'Host': 'httpbin.org' } dict = {'name': 'taotao'} data = bytes(parse.urlencode(dict), encoding='utf8') req = request.Request(url=url, data=data, headers=headers, method='POST') response = request.urlopen(req) print(response.read().decode('utf-8'))
添加请求头的第二种post方式, 好处是自己可以定义一个请求头字典,然后循环进行添加
from urllib import request, parse url = 'http://httpbin.org/post' dict = {'name': 'Germey'} data = bytes(parse.urlencode(dict), encoding='utf8') req = request.Request(url=url, data=data, method='POST') req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)') response = request.urlopen(req) print(response.read().decode('utf-8'))
5、urllib.parse模块 方法
url解析模块
1. urlparse( ) 方法 拆分url
URL解析函数侧重于将URL字符串拆分为其组件,或者将URL组件组合为URL字符串
拆分的时候协议类型部分就会是scheme=“ ”指定的部分。如果url里面已经带了协议,scheme指定的协议不会生效
urllib.parse.urlparse(urlstring, scheme=” “, allow_fragments=True)
urlparse(“www.baidu.com/index.html;user?id=5#comment”,scheme=”https”)
from urllib.parse import urlparse, urlunparse
# 对传入的url地址进行拆分; 可以用 scheme=“ ” 指定协议类型:
result = urlparse("http://www.baidu.com/index.html;user?id=5#comment")
print(result)
# ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html',
# params='user', query='id=5', fragment='comment')
2. urlunparse( ) 方法 拼接url
功能和urlparse的功能相反,它是用于拼接
data = ['http', 'www.baidu.com', 'index.html', 'user', 'a=123', 'commit']
print(urlunparse(data)) # http://www.baidu.com/index.html;user?a=123#commit
6. urlencode( ) 方法
这个方法可以将字典转换为url参数
对url进行编码,因为urllib这个框架中的url中不能出现汉字,只能出现ascii码字符
from urllib import parse url = "https://www.baidu.com/s?" # 把参数写成字典的形式 dic = {"ie": "utf-8", "wd": "奔驰"} # 用parse的urlencode方法编码 parames = parse.urlencode(dic) # 将编码以后的参数拼接到url中 url += parames print(request.urlopen(url=url))
参考:https://www.lagou.com/lgeduarticle/34376.html
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215749.html原文链接:https://javaforall.net
