Python クローラーは、リクエスト内のモジュール リクエスト パラメーターの 1 つを学習します。

1. パラメータの完全な概要

1. 以下は、Python ソースコード内のすべてのメソッドのパラメータです。多くのメソッドが含まれていますが、すべてを使用できるわけではありません。ここでは、私が経験に基づいてよく使用するいくつかのパラメータを使用して説明します。


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. クエリパラメータ

1. ここでは例を挙げます。たとえば、次のような Web サイトがあります。

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

2. ここにこのような URL アドレスがあります。? の前にURL。 戻る2 進数はクエリパラメータです

3. もちろん、この種のクエリ パラメータはキーワード パラメータを通じて構築することもできます。たとえば、次の 2 つのコードの意味は同じです。


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. もちろん、クエリの値がどのように変化したかに気づいたはずです。実際には、値は変わっていません。場所によって名前が異なるだけです。これは URL エンコーディングのためです: デフォルト中国語の文字は http プロトコルではサポートされていないため、自動的に URL エンコードされます。彼の構成要素:%文字と数字

5. 彼の方法は次のとおりです

# 这只是一部分的代码,主要介绍的是方法
# 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. リクエストパラメータ (郵送で送信されたリクエストはコードでのみ表示でき、Web ページ上で直接見つけることはできません)

1. 投稿リクエストを送信する場合、この構築方法をよく使用します。たとえば、動的データを送信する場合、ここでは KFC を例に挙げます。

2 まず、KFC の公式 Web サイトを開き、レストラン検索をクリックしてから、まず開発者ツールバーを開き、通信網をクリックしてから、フェッチ/XHR次に、入力ボックスに移動して、クエリを実行する場所の KFC 店舗の情報を入力し、[検索] をクリックして、返されたデータ パッケージを開きます。

ここに画像の説明を挿入

ここに画像の説明を挿入

3. フォームデータは返されたリクエストパラメータの情報です。データを使用して構築します。以下はコードです。コードは最も直接的な方法です。

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)

4. プロキシパラメータの使用

1. これはエージェントを構築するためのパラメータです。後の学習プロセスでは、IP がブロックされるリスクに直面することになります。このとき、データを取得するために他人の IP を使用します。


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. これはプロキシの使用です。プロキシの IP を見つける方法については後ほど説明します。

おすすめ

転載: blog.csdn.net/m0_74459049/article/details/130763679