反反爬--Python爬虫使用代理ip/ip池测试

在使用python进行爬虫时,经常会遇到被网站反爬ip被封的情况,这时候需要用到ip池来通过不断地更换ip,以防被网站反爬措施制裁。

**

1. 代理ip介绍

**

代理ip网站有很多大家自行查询,这里写会被当做广告,新用户注册有10000个ip额度,不过期限只有一天,我用的是比较笨的方法,所以没有用完,之后再研究一下,老用户每天可以再领20个,当天失效。此外在github上也有关于代理ip的详细项目及介绍如proxy,供大家学习使用。这里简单说一下我使用代理ip的过程:

首先是注册实名认证签合约书等等环节,这是必不可少的,每一个代理ip网站都需要。接下来是进入提取ip的过程:

在这里插入图片描述
根据你要爬的网站使用的协议,是http还是https类型,选择你要提取对应的ip和端口号,稳定使用时长有三个选择,ip是有使用时效的,我用的5-25分钟的,使用寿命平均在15分钟左右吧,25min-3h的稳定个20多分钟还是没问题的,但是时间长了也容易被封ip需要再换新的,3-6h的我没用过,因为提取不出来,说没那么多让我提取…

它的提取数量个人随意,我感觉使用5-25min的,每次提取60个或者70个就行,虽然说提取是不花钱的,只有使用了才花钱,而且在ip有效期内你可以多次使用,那么提取多了,每个ip用了1次,也都过期了,不划算。

其他的设置没有特殊情况默认就行,点击生成API链接,会看到底下生成了三个链接:
在这里插入图片描述
**

2、代理ip使用

**
上边点击生成API链接会生成3个链接,这里我选用了中间的独享ip,看介绍我觉得应该比较稳定吧,点击打开链接,这里我提取了20个,会跳转网页看到下图:
在这里插入图片描述
直接CTRL+ACVS一通操作弄到自己保存ip的文本文档,我这里弄到了“ip port.txt”中,开始测试,测试代码放在了本文最后,冒号前是ip,后是端口号,组成新的访问ip,random方法随便从ip文档中选一个。

在这里插入图片描述

可以看到我的测试结果中,网站可以正常响应,状态码“200”,网页结果也可以正常打印出来。

至此,说明ip池测试成功了,接下来就是尽快使用了。放到爬虫代码中,只需加入如下代码部分并且在response中加入proxies:response = requests.get(url, headers= header, proxies=get_random_proxy()),其他的不用动,就可以正常使用了:

proxies = {}

def get_random_proxy():
    with open("ip port.txt", "r") as f:
        lines = f.readlines()
    ip_port = random.choice(lines)
    proxyHost, proxyPort = ip_port.split(":")
    proxyMeta = "https://%(host)s:%(port)s" % {
        "host" : proxyHost,
        "port" : proxyPort,
    }
    proxies["https"] = proxyMeta
    return proxies

爬取结果如下,大部分是可以正常爬取的,像红框圈出来的部分,可能就是ip失效了,其他爬不出来的要么是关键词在对应百科中没有找到,要么就是有义项,要么就是ip被封了,反正爬个十多分钟左右,看着经常报错,那么就可以停止爬取了,更换一批新ip,上一批老ip也物尽所用了。
在这里插入图片描述
**

3、完整测试代码

**
附完整测试代码:

import random
import requests

proxies = {}
targetUrl = "随便一个网址测验连接状态"
def get_random_proxy():
    with open("ip port.txt", "r") as f:
        lines = f.readlines()
    ip_port = random.choice(lines)
    proxyHost, proxyPort = ip_port.split(":")
    proxyMeta = "https://%(host)s:%(port)s" % {
        "host" : proxyHost,
        "port" : proxyPort,
    }
    proxies["https"] = proxyMeta
    return proxies

# 发送请求
resp = requests.get(targetUrl, proxies=get_random_proxy())
print(resp.status_code)
print(resp.text)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Magneto_万磁王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值