2, urllib Biblioteca - una solicitud de red

2, biblioteca urllib - una solicitud de red

módulo de procesamiento de URL

  1. urllib lista de proyectos es una colección de más módulos utilizados en la URL del paquete:
  2. Urllib.request lista de elementos para abrir y leer el URL
  3. Contiene una lista de elementos urllib.error excepciones lanzadas urllib.request
  4. Lista de artículos Urllib.parse URL utilizada para análisis sintáctico
  5. Urllib.robotparser lista de elementos utilizado para analizar el archivo robots.txt

Iniciar una solicitud

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

#参数描述
第一个参数 String 类型的地址或者一个Request 对象
data 是 bytes 类型的内容,可通过 bytes()函数转为化字节流。它也是可选参数。使用 data 参数,请求方式变成以 POST 方式提交表单。使用标准格式是application/x-www-form-urlencoded
timeout 参数是用于设置请求超时时间。单位是秒。
cafile和capath代表 CA 证书和 CA 证书的路径。如果使用HTTPS则需要用到。
context参数必须是ssl.SSLContext类型,用来指定SSL设置
cadefault参数已经被弃用,可以不用管了。
该方法也可以单独传入urllib.request.Request对象
该函数返回结果是一个http.client.HTTPResponse对象

rastreo sencilla la web

import urllib.request

url = "http://tieba.baidu.com"
response = urllib.request.urlopen(url)
html = response.read()         # 获取到页面的源代码
print(html.decode('utf-8'))    # 转化为 utf-8 编码

Juego de solicitudes de tiempo de espera

Debido a razones de red no puede ser solicitada en respuesta, establece el tiempo de espera, descarta la solicitud o seleccionar otra solicitud de nuevo.

import urllib.request

url = "http://tieba.baidu.com"
response = urllib.request.urlopen(url, timeout=1)
print(response.read().decode('utf-8'))

tiempo de espera de rastreo

import socket
import urllib.request
import urllib.error

try:
    response = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
except urllib.error.URLError as e:
    if isinstance(e.reason, socket.timeout):
        print('TIME OUT')

El uso de parámetros de los datos presentados

Después de eso utilizar el método POST para enviar datos

import urllib.parse
import urllib.request

url = "http://127.0.0.1:8000/book"
params = {
  'name':'浮生六记',
  'author':'沈复'
}

data = bytes(urllib.parse.urlencode(params), encoding='utf8')
response = urllib.request.urlopen(url, data=data)
print(response.read().decode('utf-8'))

params necesidades para transcodificar en un flujo de bytes. Y params es un diccionario. Tenemos que utilizar urllib.parse.urlencode () el diccionario en una cadena. Reutilización bytes () en una corriente de bytes. Finalmente, utilizando la urlopen () inicia una solicitud, la solicitud se simula la presentación de los datos del formulario utilizando el método POST

de solicitud de uso

el método urlopen () proporciona un simple iniciador petición se puede añadir .Request solicitud de cabecera (cabeceras), especifique la solicitud
constructor de la solicitud:

urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)

#参数说明
url 参数是请求链接,这个是必传参数,其他的都是可选参数。
data 参数跟 urlopen() 中的 data 参数用法相同。
headers 参数是指定发起的 HTTP 请求的头部信息。headers 是一个字典。它除了在 Request 中添加,还可以通过调用 Reques t实例的 add_header() 方法来添加请求头。
origin_req_host 参数指的是请求方的 host 名称或者 IP 地址。
unverifiable 参数表示这个请求是否是无法验证的,默认值是False。意思就是说用户没有足够权限来选择接收这个请求的结果。例如我们请求一个HTML文档中的图片,但是我们没有自动抓取图像的权限,我们就要将 unverifiable 的值设置成 True。
method 参数指的是发起的 HTTP 请求的方式,有 GET、POST、DELETE、PUT等

Fácil de usar Solicitud

mascarada User_Agent

import urllib.request

url = "http://tieba.baidu.com/"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

Solicitud Uso avanzado

Añadir proxy en la solicitud, las galletas de procesar una solicitud, tenemos que utilizar Handler y OpenerDirector

1) Handler

Manejador en chino significa manipuladores, procesadores. Manejador puede manejar varias cosas solicitud (HTTP, HTTPS, FTP, etc.). Es una realización concreta de esta urllib.request.BaseHandler clase. Es la clase base para todos Handler, que proporciona el método más básico Handler, por ejemplo default_open (), protocol_request () y similares.
Hay una serie de BaseHandler heredada, Voy a enumerar algunos de los tipos más comunes:

ProxyHandler: Conjunto de la solicitud de proxy
HTTPCookieProcessor: Galletas HTTP solicitud de procesamiento
HTTPDefaultErrorHandler: tratamiento de errores de respuesta HTTP.
HTTPRedirectHandler: manejo de redirecciones HTTP.
HTTPPasswordMgr: administrar las contraseñas, que mantiene una lista de nombre de usuario y contraseña.
HTTPBasicAuthHandler: para la autenticación de inicio de sesión, y se utilizan generalmente en combinación HTTPPasswordMgr

2) OpenerDirector

Para OpenerDirector, podemos llamar abridor. Hemos utilizado urlopen () Este método, de hecho, es para nosotros proporcionar un abridor urllib. Eso abridor Handler y cuál es la relación? El abridor, objeto es crear cabo método build_opener (handler) de. Necesitamos crear un abridor de costumbre, es necesario método (abridor) install_opener uso. Es de destacar que, de instancias install_opener conseguirá un objetivo mundial de OpenerDirector

Utilizar un proxy

import urllib.request

url = "http://tieba.baidu.com/"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}

proxy_handler = urllib.request.ProxyHandler({
    'http': 'web-proxy.oa.com:8080',
    'https': 'web-proxy.oa.com:8080'
})
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)

request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

certificación de registro

import urllib.request

url = "http://tieba.baidu.com/"
user = 'user'
password = 'password'
pwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
pwdmgr.add_password(None,url ,user ,password)

auth_handler = urllib.request.HTTPBasicAuthHandler(pwdmgr)
opener = urllib.request.build_opener(auth_handler)
response = opener.open(url)
print(response.read().decode('utf-8'))

cookies creadas

Si la página solicitada requiere autenticación cada vez, podemos utilizar cookies para iniciar sesión automáticamente en, eliminando la necesidad de la operación de autenticación de inicio de sesión repetida. Galletas necesita para obtener http.cookiejar.CookieJar () para crear una instancia de un Galletas objetos. Entonces urllib.request.HTTPCookieProcessor construido objeto manejador. Finalmente, usando el abridor de la función open () puede ser

import http.cookiejar
import urllib.request

url = "http://tieba.baidu.com/"
fileName = 'cookie.txt'

cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open(url)

f = open(fileName,'a')
for item in cookie:
    f.write(item.name+" = "+item.value+'\n')
f.close()

HTTPResponse

Uso de la urllib.request.urlopen () o opener.open (url) El resultado es un objeto http.client.HTTPResponse. Tiene msg, la versión, el estado, la razón, debuglevel, atributos cerrados y leer (), readinto (), getHeader (nombre), getHeaders (), la función fileno () y similares

error al analizar

Procesamiento de excepciones se utiliza principalmente en dos clases, urllib.error.URLError y urllib.error.HTTPError
. 1, UrlError
clase de excepción UrlError es la urllib.error clase base puede capturar las excepciones generadas por urllib.request. La razón de que tiene una razón de atributos, es decir, devuelve un error

import urllib.request
import urllib.error

url = "http://www.google.com"
try:
    response = request.urlopen(url)
except error.URLError as e:
    print(e.reason)

2, la HTTPError
la HTTPError UEKRrror es una subclase de error especializado manejar peticiones HTTP y HTTPS. Tiene tres atributos.
1) Código: HTTP solicitud devuelve un código de estado.
2) Renson: De tal palo Clase de uso, que devuelve las razones equivocadas.
3) headers`: cabecera HTTP información de solicitud de respuesta devuelto

import urllib.request
import urllib.error

url = "http://www.google.com"
try:
    response = request.urlopen(url)
except error.HTTPError as e:
   print('code: ' + e.code + '\n')
   print('reason: ' + e.reason + '\n')
   print('headers: ' + e.headers + '\n')

respuesta

import urllib.request

response = urllib.request.urlopen('https://www.python.org')
print(type(response))


#结果为:<class 'http.client.httpresponse'="">

Por Response.Status, response.getheaders (). Response.getheader ( "servidor"), y la información de cabecera para obtener el response.read código de estado () se obtiene en respuesta al cuerpo del contenido

Supongo que te gusta

Origin www.cnblogs.com/g2thend/p/12452168.html
Recomendado
Clasificación