爬虫使用http代理

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

猜你喜欢

转载自blog.csdn.net/weixin_73725158/article/details/130501858
今日推荐