抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

使用爬虫采集数据时,常常会因为同一IP过于频繁的请求数据,导致IP被封禁。因此,使用代理IP轮换请求,可以降低被封的风险,提高数据采集的效率和稳定性。

本文以青果代理IP为例 (青果打钱!) 演示使用短效代理采集数据的方法:

获取API

首先,进入青果网络,点击右上角「注册」,并完成「个人实名认证」。

完成实名认证后,点击右上角「控制台」,从左边栏中选择「代理IP」,然后根据实际工程的需要选择一个代理类型,本文选择「按时业务」,点击「+新购」。

image

国内四种代理产品的区别详见 https://www.qg.net/doc/2245.html

青果IP为新用户提供6小时的免费测试,直接点击「确认订单」:

image

好像6小时的免费可以重复获取,不用担心第一次练习失败以后产生经济损失。

购买成功后,点击「产品管理」,记录当前页面的 AuthKeyAuthPwd

image

其中, AuthKey 在提取和使用代理 IP 的过程中都会用到,AuthPwd 在使用的过程中会用到。


请求IP

关于IP的请求,可以参考官网给出的技术文档:

官方还提供了一个在线 DEBUG 工具,进入页面后按照你购买的产品选择对应调试工具:

image

为了便于后续使用,我们将它封装成一个函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import requests


def get_ip(key, num=1, distinct=False):
# key 产品对应的AuthKey
# num 提取IP数量
# distinct IP去重
# 查看其他参数及含义 https://www.qg.net/tools/IPdebug.html

proxyUrl = "https://share.proxy.qg.net/get?key=%(key)s&num=%(num)s&distinct=%(distinct)s" % {
"key": key,
"num": num,
"distinct": "true" if distinct else "false"
}

resp = requests.get(url=proxyUrl)
ip = resp.json()['data'][0]['server']

return resp, ip

实际工程中,你需要根据工程需要和API接口的要求,设置请求间隔等。


使用代理IP采集数据

官网给出了多种语法下的代码示例,可以参考:

requests 库为例,基本使用思路如下:

  1. 获取代理IP,这一步可以通过之前我们封装的 get_ip() 实现;
  2. 根据代理IP配置 requests.get() 方法的参数 proxies
  3. 请求网页内容;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests


targetURL = "https://www.bilibili.com/"
authKey = "..." # 你的 AuthKey
password = "..." # 你的 AuthPwd
_, proxyAddr = get_ip(authKey)

proxyUrl = "http://%(user)s:%(password)s@%(server)s" % {
"user": authKey,
"password": password,
"server": proxyAddr,
}

proxies = {
"http": proxyUrl,
"https": proxyUrl,
}

# 不要忘了最基本的 headers 设置
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
'Cookie': "..." # 你的Cookie
}

resp = requests.get(targetURL, proxies=proxies, headers=headers)
print(resp.content.decode('utf-8'))

经过测试,可以成功请求Bilibili主页的内容。

评论