O rastreador Python aprende um dos parâmetros de solicitação do módulo nas solicitações

1. Uma visão geral completa dos parâmetros

1. A seguir estão os parâmetros de todos os métodos no código-fonte do python. Existem muitos métodos incluídos, mas não podemos usar todos eles. Aqui vou usar alguns parâmetros que costumo usar com base em minha própria experiência. para explicar.


def request(method, url, **kwargs):
    """Constructs and sends a :class:`Request <Request>`.

    :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.
    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
    :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
    :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
    :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
        ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
        or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string
        defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
        to add for the file.
    :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
    :param timeout: (optional) How many seconds to wait for the server to send data
        before giving up, as a float, or a :ref:`(connect timeout, read
        timeout) <timeouts>` tuple.
    :type timeout: float or tuple
    :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``.
    :type allow_redirects: bool
    :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
    :param verify: (optional) Either a boolean, in which case it controls whether we verify
            the server's TLS certificate, or a string, in which case it must be a path
            to a CA bundle to use. Defaults to ``True``.
    :param stream: (optional) if ``False``, the response content will be immediately downloaded.
    :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response

    Usage::

      >>> import requests
      >>> req = requests.request('GET', 'https://httpbin.org/get')
      >>> req
      <Response [200]>
    """

    # By using the 'with' statement we are sure the session is closed, thus we
    # avoid leaving sockets open which can trigger a ResourceWarning in some
    # cases, and look like a memory leak in others.
    with sessions.Session() as session:
        return session.request(method=method, url=url, **kwargs)

2. Parâmetros de consulta

1. Só dou um exemplo aqui, por exemplo, um site é o seguinte

https://pic.sogou.com/pics?query=%E9%A3%8E%E6%99%AF&mood=7&dm=0&mode=1

2. Neste tipo de endereço URL aqui. ? em frente deurl. VoltarNúmeros binários são parâmetros de consulta

3. Obviamente, esse tipo de parâmetro de consulta também pode ser construído por meio de parâmetros de palavra-chave. Por exemplo, o significado dos dois códigos a seguir é o mesmo.


import requests
url = 'https://pic.sogou.com/pics?query=%E9%A3%8E%E6%99%AF&mood=7&dm=0&mode=1'
response = requests.get(url=url)
print(response.request.url)



import requests
url = 'https://pic.sogou.com/pics'  # ? 可加可不加
params = {
    
    
    'query': '风景',
    'mood': '7',
    'dm': '0',
    'mode': '1'

}
response = requests.get(url=url, params=params)
print(response.request.url)

4. Claro, você deve ter notado como o valor da consulta mudou. Na verdade, não mudou. Apenas tem nomes diferentes em lugares diferentes. Isso ocorre por causa da codificação da url: PadrãoOs caracteres chineses não são suportados no protocolo http e serão automaticamente codificados em urlSeus componentes:% letra e número.

5. Seu método é o seguinte

# 这只是一部分的代码,主要介绍的是方法
# requests.utils.quote('风景')  对指定的中文进行url编码
print(requests.utils.quote('风景'))
# requests.utils.unquote('%E9%A3%8E%E6%99%AF')  对指定的中文进行url解码
print(requests.utils.unquote('%E9%A3%8E%E6%99%AF'))

3. Parâmetros da solicitação (a solicitação enviada por correio só pode ser visualizada com código e não pode ser encontrada diretamente na página da web)

1. Quando enviamos solicitações de postagem, geralmente usamos esse método de construção. Por exemplo, quando enviamos dados dinâmicos, aqui tomo o KFC como exemplo.

2 Primeiro, abrimos o site oficial do KFC, clique no botãopesquisa de restaurantee, em seguida, abra a barra de ferramentas do desenvolvedor primeiro, clique emRedee, em seguida, clique emBuscar/XHREm seguida, vá para a caixa de entrada para inserir as informações da loja KFC no local que deseja consultar, clique em Pesquisar. Abra o pacote de dados retornado. Conforme mostrado na figura

insira a descrição da imagem aqui

insira a descrição da imagem aqui

3. Dados do formulário são as informações dos parâmetros de solicitação retornados, usamos dados para construir, o seguinte é o código, o código é a maneira mais direta.

import requests
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx'
params = {
    
    'op': 'keyword'}
data = {
    
    
    'cname': '',
    'pid': '',
    'keyword': '黄石',
    'pageIndex': '1',
    'pageSize': '10'
}  # 构建请求参数

# data 关键字构建请求参数的关键字
response = requests.post(url=url, params=params, data=data)
json_data = response.json()
print(json_data)

Quatro. O uso de parâmetros de proxies

1. Este é o parâmetro para a construção de um agente. Em nosso aprendizado posterior, enfrentaremos o risco do IP ser bloqueado. Neste momento, usaremos o IP de outras pessoas para obter dados.


import requests
# 这个是获取IP的函数,你们运行不了,这里只是参考怎么使用
def get_proxy():
    url = 'http://zltiqu.pyhttp.taolop.com/getip?count=1&neek=13873&type=2&yys=0&port=2&sb=&mr=2&sep=0&ts=1'
    response = requests.get(url=url)
    json_data = response.json()
    # print(json_data)

    ip_port = json_data['data'][0]['ip'] + ":" + str(json_data['data'][0]['port'])
    # print(ip_port)

    proxies = {
    
    
        "http": "http://" + ip_port,
        "https": "http://"  + ip_port,
    }
    return proxies # 返回代理IP

proxies = get_proxy()
print(proxies)
url = 'https://www.ku6.com/index'
# proxies关键是使用代理请求的关键字, 代理质量不好的话就会报错(requests.exceptions.ProxyError)
response = requests.post(url=url, proxies=proxies)
print(response.status_code)
print(response.text)

2. Este é o uso do proxy, e falarei sobre como encontrar o IP do proxy mais tarde.

Acho que você gosta

Origin blog.csdn.net/m0_74459049/article/details/130763679
Recomendado
Clasificación