1、每个过程从接口中随机取出IP列表,重复使用。失败后,调用API获取。
一般逻辑如下:
(1)每个过程,从接口中随机取回部分ip,反复尝试ip目录以获取数据;
(2)如果访问成功,继续抓住下一个。
(3)如果失败,从界面取一批IP,继续尝试。
方案缺点:每个IP都有截止日期。如果提取100个,使用第20个,剩下的大部分可能无法使用。如果设置HTTP请求时连接时间超过3秒,读取时间超过5秒,可能需要3-8秒,3-8秒内可能会抓取几百次。
2、每个过程从界面随机取一个IP使用。如果失败,调用API获取IP。
一般逻辑如下:
(1)每个过程,从界面随机取回一个ip,使用它浏览资源,
(2)如果访问成功,继续抓住下一个。
(3)如果失败,随机从界面取一个IP,继续尝试。
方案缺点:调用API获取IP非常频繁,会对代理服务器造成很大压力,影响API接口的稳定性,可能会限制提取。这个方案不适合,不能长期稳定运行。
3、首先提取大量IP导入本地数据库,从数据库中提取IP。
一般逻辑如下:
(1)在数据库中建立一个表格,写一个导入脚本,每分钟需要多少个API(咨询代理IP服务提供商的建议),并将IP列表导入数据库。
(2)记录导入时间、IP、Port、过期时间、IP可用状态等字段;
(3)写一个抓取脚本,从数据库中读取可用的IP,每个过程从数据库中获取一个IP供使用。
执行抓取、判断结果、处理cookie等。,只要有验证码或失败,就放弃ip,重新更换ip。
#! -*- encoding:utf-8 -*-
import requests
# 要访问的目标页面
targetUrl = "http://ip.hahado.cn/ip"
# 代理服务器
proxyHost = "ip.hahado.cn"
proxyPort = "39010"
# 代理隧道验证信息
proxyUser = "username"
proxyPass = "password"
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxyHost,
"port" : proxyPort,
"user" : proxyUser,
"pass" : proxyPass,
}
proxies = {
"http" : proxyMeta,
"https" : proxyMeta,
}
resp = requests.get(targetUrl, proxies=proxies)
print resp.status_code
print resp.text
标签:http,ip,数据库,爬虫,代理,API,随机,IP
From: https://blog.51cto.com/u_15822686/6245032