V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xueyoucai
V2EX  ›  Python

爬虫代理 IP 添加后,怎么样才能定时更换 IP?

  •  
  •   xueyoucai · 2020-06-12 14:47:26 +08:00 · 4156 次点击
    这是一个创建于 1604 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有获取 IP 的 API,因为代理商的限制条件每个 IP 只存在 5 分钟-20 分钟不等。

    之前有尝试添加 threadiing 模块下的 timer 模块,但是好像不是很理想。所以想请教一下各位。

    如何做到在主函数不停止运行的情况下,每 5 分钟更换一个 IP,然后爬虫继续运行

    34 条回复    2020-07-09 10:17:57 +08:00
    lijia168
        1
    lijia168  
       2020-06-12 15:21:33 +08:00
    我之前那样子弄的,代理 ip 有个过期时间, 判断时间是否过期,过期了再重新取代理 ip
    kiracyan
        2
    kiracyan  
       2020-06-12 15:24:01 +08:00
    居然是五分钟换一个 一般不是从 ip 池里面随机取的吗 然后更新缓存池就好了
    xueyoucai
        3
    xueyoucai  
    OP
       2020-06-12 15:29:43 +08:00
    @kiracyan 我的那个是 9 元 1000 条的 IP,有时效性,IP 只要提出来过几分就用不了了
    xueyoucai
        4
    xueyoucai  
    OP
       2020-06-12 15:30:50 +08:00
    @lijia168 嗯,我也是这么想的,但是怎么样在到时间以后让采集数据的函数停止,然后去换 IP,还完以后在去执行函数
    ik
        5
    ik  
       2020-06-12 15:37:58 +08:00 via iPhone
    楼主的意思是爬虫里面逻辑不好定时更新代理对吧?
    可以试试用脚本配合 haproxy , iptables , cow 等方式实现定期更新端口转发
    optional
        6
    optional  
       2020-06-12 15:40:53 +08:00
    计算机里解决不了的问题就加一层。
    爬虫的 ip 从 cache 里取, 有个线程定时维护 cache 。
    ik
        7
    ik  
       2020-06-12 15:40:56 +08:00 via iPhone
    这样爬虫内使用的代理始终都是固定不变的, 只是可能需要解决重启转发服务时可能出现的异常
    huayunbin
        8
    huayunbin  
       2020-06-12 15:46:08 +08:00
    可以写个程序维护一个 ip 池,暴露个取 ip 的口子出去,爬虫直接取就行了。
    xueyoucai
        9
    xueyoucai  
    OP
       2020-06-12 15:48:26 +08:00
    @ik 对,您说的这几个都在 python 底下的库,还是在系统层面操作的
    xueyoucai
        10
    xueyoucai  
    OP
       2020-06-12 15:51:31 +08:00
    @optional 这个有一个具体的思路吗,在下才疏学浅
    xueyoucai
        11
    xueyoucai  
    OP
       2020-06-12 15:53:11 +08:00
    @huayunbin 问题是 如果把 Ip 取出来就开始计时了,到点就过期了
    312ybj
        12
    312ybj  
       2020-06-12 15:53:25 +08:00
    老铁,你的 ip 代理从哪弄得
    nullboy
        13
    nullboy  
       2020-06-12 15:53:35 +08:00
    我怎么试了几个代理服务商都很垃圾,根本没法用
    xueyoucai
        14
    xueyoucai  
    OP
       2020-06-12 15:58:39 +08:00
    @312ybj 在一个 IP 代理池的项目里,然后有推荐 IP 代理网站,我的那个是按个卖的,9 元 1000 。没法,公司不掏大钱,只能小钱买这种了
    aladdindingding
        15
    aladdindingding  
       2020-06-12 15:59:21 +08:00
    在用快代理他们隧道代理 还行
    xueyoucai
        16
    xueyoucai  
    OP
       2020-06-12 16:02:22 +08:00
    @nullboy 我的还行,可能是我用的少? 1000 条 我做测试用了 300 。然后不能用的大概有 60 多
    aladdindingding
        17
    aladdindingding  
       2020-06-12 16:04:26 +08:00
    用 redis 呗 或者自己起一个线程维护一个可以用的 ip 池
    wxiao333
        18
    wxiao333  
       2020-06-12 16:06:07 +08:00   ❤️ 1
    阿布云,一个请求换一次 ip,不按数量收费按时间,不香吗
    Cosimsolo
        19
    Cosimsolo  
       2020-06-12 16:11:27 +08:00
    @xueyoucai 隧道代理云端切换不香吗?建议可以试用一下快代理或者阿布云,都有隧道产品,能够设置定时切换,自己测试看看
    kiracyan
        20
    kiracyan  
       2020-06-12 16:15:25 +08:00
    @xueyoucai 拿 ip 的时候能拿到过期时间吗 然后纪录过期时间 每次拿 ip 的时候从内存读 先判断是否过期 过期再从接口拿一个更新过期时间
    batyu
        21
    batyu  
       2020-06-12 16:23:21 +08:00
    看了评论才明白隧道代理是干嘛用的!
    xueyoucai
        22
    xueyoucai  
    OP
       2020-06-12 16:26:42 +08:00
    @kiracyan 不行,没法获取时间
    xueyoucai
        23
    xueyoucai  
    OP
       2020-06-12 16:27:23 +08:00
    @Cosimsolo 嗯哼 我试试
    lawler
        24
    lawler  
       2020-06-12 17:33:16 +08:00
    超时重试,第二次失败,切换 IP 。
    gxlonline
        25
    gxlonline  
       2020-06-12 19:59:21 +08:00 via Android
    可以试下 酷鱼代理 私密代理 隧道代理
    biu7
        26
    biu7  
       2020-06-12 20:39:23 +08:00
    9 元 1000 听上去像是讯代理。。。
    wangyzj
        27
    wangyzj  
       2020-06-12 20:41:46 +08:00
    之前我是淘宝买可以带换 ip 软件的 vps,各种换
    toomlo
        28
    toomlo  
       2020-06-13 12:39:57 +08:00
    问题是 如果把 Ip 取出来就开始计时了,到点就过期了
    -----------
    第一次用 ip 的时候才去代理商那里取,然后在存到代理池里面啊
    不一定非得先取了 ip 在用啊
    xueyoucai
        29
    xueyoucai  
    OP
       2020-06-13 14:46:23 +08:00
    @toomlo 你指的是一次全拿出来吗。但是 IP 提供商说了,是取出来以后就开始计时了。
    airdge
        30
    airdge  
       2020-06-14 07:59:01 +08:00
    ip 设置有效期啊,数据过期就重新获取
    写入缓存或者文本
    xiaozizayang
        31
    xiaozizayang  
       2020-06-14 10:42:35 +08:00
    利用买的代理来源做个代理池就行,爬虫服务从代理池那代理进行请求
    另一个保证代理池服务都是可用的就行
    dorothyREN
        32
    dorothyREN  
       2020-06-14 13:00:50 +08:00
    存到 redis 里面 设置个超时时间,这样只要 redis 里面有,那就是有效的
    g079708
        33
    g079708  
       2020-06-29 23:15:52 +08:00 via iPhone
    可以试一下快鸟代理,他们的短效代理 IP 有 1 分钟到 24 小时的时长任你选择,提取不收费,按使用收费。
    gxlonline
        34
    gxlonline  
       2020-07-09 10:17:57 +08:00
    可以用隧道代理,省去更换代理的步骤,云端自动切换 IP 。
    酷鱼代理 https://kuyukuyu.com 隧道代理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1234 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 18:32 · PVG 02:32 · LAX 11:32 · JFK 14:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.