[ 登录 ] - [ 注册 ] | 免费代理IP 数据无忧_无忧代理IP_DATA5U最新上线 | 代码示例DEMO | IP测试视频 | 用户协议

如何在Python爬虫请求时使用代理IP

作者:数据无忧   时间:2022-12-08 14:51:12
无忧代理IP推广返现活动


介绍

在本文中,您将研究如何在代理服务器后面使用 Python Requests 库。开发人员使用代理来实现匿名性和安全性,有时甚至会使用多个代理来防止网站禁止其 IP 地址。代理还具有其他一些好处,例如绕过过滤器和审查制度。让我们开始吧!

先决条件和安装

本文适用于那些想在 Python 中使用代理进行抓取的人。为了充分利用材料,有利于:

  1. 有使用 Python 3 的经验。
  2. 在本地机器上安装 Python 3。

通过打开终端并键入以下内容来检查是否python-requests安装了 pacakges:

$ pip freeze

pip freeze将显示您当前所有的 python 包及其版本,因此请继续检查它是否存在。如果没有,请运行以下命令安装它:

$ pip install requests

如何在 Python 请求中使用代理

  1. 要在 Python 中使用代理,首先导入requests.

  2. 接下来创建一个proxies定义 HTTP 和 HTTPS 连接的字典。此变量应该是将协议映射到代理 URL 的字典。此外,url为您要从中抓取的网页设置一个变量。

请注意在下面的示例中,字典为两个单独的协议定义了代理 URL:HTTP 和 HTTPS。每个连接映射到一个单独的 URL 和端口,但这并不意味着两者不能相同

  1. 最后,创建一个response使用任何请求方法的变量。该方法将接受两个参数:您创建的 URL 变量和定义的字典。

您可以对不同的 api 调用使用相同的语法,但无论您进行何种调用,都需要指定协议。

import requests

proxies = {
   'http': 'http://proxy.example.com:8080',
   'https': 'http://secureproxy.example.com:8090',
}

url = 'http://mywebsite.com/example'

response = requests.post(url, proxies=proxies)

请求方法

response = requests.get(url)
response = requests.post(url, data={"a": 1, "b": 2})
response = requests.put(url, data=put_body)
response = requests.delete(url)
response = requests.patch(url, data=patch_update)
response = requests.head(url)
response = requests.options(url)

代理身份验证

如果需要添加身份验证,可以使用以下语法重写代码:

response = requests.get(url, auth=('user', 'pass'))

代理会话

您可能还会发现自己想要从使用会话的网站上抓取数据,在这种情况下,您必须创建一个会话对象。您可以通过首先创建一个session变量并将其设置为请求Session()方法来执行此操作。然后与之前类似,您将通过 requests 方法发送会话代理,但这次只传入url作为参数。

import requests

session = requests.Session()

session.proxies = {
   'http': 'http://10.10.10.10:8000',
   'https': 'http://10.10.10.10:8000',
}

url = 'http://mywebsite.com/example'

response = session.get(url)

环境变量

您可能会发现自己为每个请求重复使用相同的代理,因此请随时通过设置一些环境变量来 DRY 代码:

export HTTP_PROXY='http://10.10.10.10:8000'
export HTTPS_PROXY='http://10.10.10.10:1212'

如果您决定设置环境变量,则不再需要在代码中设置代理。只要你提出请求,就会进行 api 调用!

阅读回应

如果您想阅读您的数据:

response = requests.get(url)
text_resp = response.text

JSON:对于 JSON 格式的响应,请求包提供了一个内置方法。

response = requests.get(url)
json_resp = response.json()

根据请求轮换代理

还记得我们说过一些开发人员使用多个代理吗?好吧,现在你也可以了!

每当您发现自己反复从网页上抓取时,最好使用多个代理,因为您的抓取工具很可能会被阻止,这意味着您的 IP 地址会被禁止。刮取消文化是真实的!因此,为避免被取消,最好使用轮换代理。旋转代理是一种代理服务器,它从代理池中为每个连接分配一个新的 IP 地址。

要轮换 IP 地址,您首先需要有一个可用的 IP 池。您可以使用在 Internet 上找到的免费代理或商业解决方案。在大多数情况下,如果您的服务依赖于抓取的数据,那么免费代理很可能是不够的。

如何根据请求轮换 IP

为了开始轮换您的 IP 地址,您需要一个能够获取代理IP的API接口今天您将编写一个脚本,通过代理进行选择和轮换。

  1. 首先导入requestsBeautifulSoupchoice库。

  2. 接下来定义一个方法get_proxy(),负责检索 IP 地址供您使用。在此方法中,您将定义您url选择使用的任何代理列表资源。发送请求 api 调用后,将响应转换为 Beautiful Soup 对象以使提取更容易。使用 html5lib 解析器库来解析网站的 HTML,就像浏览器一样。创建一个proxy变量,用于choice从 生成的代理列表中随机选择一个 IP 地址soup在 map 函数中,您可以使用一个lambda函数将 HTML 元素转换为检索到的 IP 地址和端口号的文本。

  3. 创建一个proxy_request接受 3 个参数的方法: the request_type、 theurl**kwargs在此方法内,将您的代理字典定义为从该get_proxy方法返回的代理。与之前类似,您将使用requests, 传递参数。

import requests

ip_addresses = [ "mysuperproxy.com:5000", "mysuperproxy.com:5001", "mysuperproxy.com:5100", "mysuperproxy.com:5010", "mysuperproxy.com:5050", "mysuperproxy.com:8080", "mysuperproxy.com:8001", 
"mysuperproxy.com:8000", "mysuperproxy.com:8050" ]

def proxy_request(request_type, url, **kwargs):
   while True:
      try:
         proxy = random.randint(0, len(ip_addresses) - 1)
            proxies = {"http": ip_addresses(proxy), "https": ip_addresses(proxy)}
            response = requests.get(request_type, url, proxies=proxies, timeout=5, **kwargs)
            print(f"Proxy currently being used: {proxy['https']}")
         break
      except:
         print("Error, looking for another proxy")
   return response

您现在可以同时刮擦和旋转所有内容!

结论

虽然立即开始使用您喜欢的新代理进行抓取可能很诱人,但您仍然应该了解一些关键事项。对于初学者来说,并不是所有的代理都是一样的。实际上有不同的类型,主要有三种:透明代理、匿名代理和精英代理。

在大多数情况下,您将使用精英代理,无论是付费的还是免费的,因为它们是避免被发现的最佳解决方案。如果仅出于隐私目的使用代理,匿名代理可能值得您花时间。除非有特殊原因,否则不建议使用透明代理,因为透明代理会泄露您的真实 IP 地址,并且您正在使用代理服务器。

现在我们已经全部清理完毕,是时候开始使用Python 中的代理进行抓取了。所以,开始吧,提出所有你能想到的要求!


福利:现在通过开发者购买代理IP,购买后联系客服最高可获   返现20%   到你的支付宝(最低35元,最高1440元)


微信公众号
关注微信公众号