### Uso da Função urlopen
# encoding: utf-8
import urllib.request
resultado = urllib.request.urlopen("https://www.cnblogs.com/")
print(resultado.readlines())
# Parâmetros do urlopen
# def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None):
### Função urlretrieve
Baixar arquivos de uma URL para o disco local.
# coding: utf-8
import urllib.request
resultado = urllib.request.urlretrieve("https://www.cnblogs.com/", 'cnblog.html')
# Parâmetros do urlretrieve
# def urlretrieve(url, filename=None, reporthook=None, data=None):
### Funções de Codificação e Decodificação de Parâmetros
A função urlencode codifica caracteres especiais e caracteres não ASCII.
# urlencode
# Uso básico
# from urllib import parse
# dados = {'nome': 'Drake', 'idade': 100}
# queryString = parse.urlencode(dados)
# print(queryString) # nome=%E5%BE%B7%E7%91%9E%E5%85%8B&idade=100
# Exemplo prático
import urllib.request, urllib.parse
url = "http://www.baidu.com/s"
parametros = {"wd": "博客园"}
queryString = urllib.parse.urlencode(parametros)
url = url + "?" + queryString
resultado = urllib.request.urlopen(url)
print(resultado.read())
A função parse_qs decodifica parâmetros de URL codificados.
import urllib.parse
queryString = "nome=%E5%BE%B7%E7%91%9E%E5%85%8B&idade=100"
print(urllib.parse.parse_qs(queryString)) # {'nome': ['Drake'], 'idade': ['100']}
### Funções urlparse e urlsplit
As funções urlparse e urlsplit dividem uma URL em seus componentes. A diferença é que urlsplit não possui o atributo "params".
import urllib.parse
url = "https://www.baidu.com/s?wd=cnblog#2"
resultado = urllib.parse.urlparse(url)
print(resultado)
# ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=cnblog', fragment='2')
print('scheme:', resultado.scheme) # protocolo
print('netloc:', resultado.netloc) # domínio
print('path:', resultado.path) # caminho
print('query:', resultado.query) # parâmetros de consulta
# Resultado
# scheme: https
# netloc: www.baidu.com
# path: /s
# query: wd=cnblog
### Recuperando Informações de Vagas no Lagou usando Request
Parâmetros da classe Request:
class Request:
def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False,
method=None):
Recuperando informações de vagas no Lagou:
# Usando a classe Request para obter informações de vagas no Lagou
import urllib.request, urllib.parse
url = "https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false"
# Cabeçalho da requisição
cabecalhos = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36",
"Referer": "https://www.lagou.com/jobs/list_python?city=%E5%8C%97%E4%BA%AC&cl=false&fromSearch=true&labelWords=&suginput="
}
# Dados para a requisição POST
dados = {
'primeiro': 'true',
'pn': 1,
'kd': 'python'
}
# Os dados para POST devem ser codificados em bytes
requisicao = urllib.request.Request(url, headers=cabecalhos, data=urllib.parse.urlencode(dados).encode('utf-8'), method='POST')
resposta = urllib.request.urlopen(requisicao)
# As informações retornadas são em bytes, então precisam ser decodificadas
print(resposta.read().decode('utf-8'))
### Uso de ProxyHandler
Princípio do proxy: antes de solicitar o site de destino, solicitamos ao servider proxy que faça a solicitação. Após receber os dados, eles são enviados de volta a nós.
# Usando ProxyHandler
import urllib.request
url = "https://www.baidu.com/s?wd=cnblog"
# 1. Criar um handler ProxyHandler com o endereço do proxy
# manipulador = urllib.request.ProxyHandler({'http': '115.210.31.236.55:9000'})
manipulador = urllib.request.ProxyHandler({'http': '115.210.31.236.55:9000'})
# 2. Construir um opener usando o handler criado
abridor = urllib.request.build_opener(manipulador)
# 3. Usar o opener para enviar uma solicitação
resposta = abridor.open(url)
print(resposta.read())