首页 > 其他分享 >使用代理绕过网站的反爬机制

使用代理绕过网站的反爬机制

时间:2024-04-21 11:35:00浏览次数:14  
标签:get 网站 IP 代理 proxy 绕过 proxies requests

最近在尝试收集一些网络指标的数据, 所以, 我又开始做爬虫了。 :)

我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误,比如 403 Forbidden,这时候打开网页一看,可能会看到 “您的 IP 访问频率太高” 这样的提示,或者跳出一个验证码让我们输入,输入之后才可能解封,但是输入之后过一会儿就又这样了。

出现这样的现象的原因是网站采取了一些反爬虫的措施,比如服务器会检测某个 IP 在单位时间内的请求次数,如果超过了这个阈值,那么会直接拒绝服务,返回一些错误信息,这种情况可以称之为封 IP,于是乎就成功把我们的爬虫禁掉了。

既然服务器检测的是某个 IP 单位时间的请求次数,那么我们借助某种方式来伪装我们的 IP,让服务器识别不出是由我们本机发起的请求,不就可以成功防止封 IP 了吗?

所以这时候代理就派上用场了。本章会详细介绍代理的基本知识及各种代理的使用方式,包括代理的设置、代理池的维护、付费代理的使用、ADSL 拨号代理的搭建方法等内容,以帮助爬虫脱离封 IP 的 “苦海”。

获取代理

在做测试之前, 我们需要先获取一个可用代理。搜索引擎搜索 “代理” 关键字,就可以看到许多代理服务网站,网站上会有很多免费代理, 大部分免费的代理都不好用, 我也想过从一些发布免费代理的网页上采集代理的地址, 哎, 就这事, 就花了两天时间, 很多时候, 采集来的代理基本上没法用, 采集了几百个, 最后自检的时候, 就剩下不到20个alive的。

后来找到一个付费的代理, 当然付费代理就好用很多, 常用的付费代理, 我就不一一介绍了, 由于我是采集海外的资源, 所以根据一些论坛的推荐, 找到了 这家, 我也顺便发个aff, 介意勿点。

Socks5.io 海外IP代理

Edit description

my.socks5.io

为什么推荐这个, 是因为这家让我意外的发现他们家的免费代理也很好用, 不尽快, 还能保证很高的可用性。 来看看这个免费的offer, 0元购

看到没, 说实话, 我现在在做的事情, 包括这篇文章, 就是为了拿到第三个offer。 Anyway, 我们先注册一个账号, 可以先免费使用部分代理, 然后我们使用代理池来确保我们的python 爬虫, 可以批量的添加代理, 或者随机选择代理。

我们先选择免费动态ip代理, 然后可以提取最多100个ip, 剩下就生成API 提取就可以了。 比忘记把你自己的公网地址放到白名单里。 然后生成的url可以直接用浏览器打开, 就可以看到是这样格式的代理地址列表

随便测试一个都可以用。

使用 requests 来随机选择代理访问

对于 requests 来说,代理设置更加简单,我们只需要传入 proxies 参数即可。

还是以上例中的代理为例,我们来看下 requests 的代理的设置:

import requests

proxy = '127.0.0.1:9743'
proxies = {
    'http': 'http://' + proxy,
    'https': 'https://' + proxy,
}
try:
    response = requests.get('http://httpbin.org/get', proxies=proxies)
    print(response.text)
except requests.exceptions.ConnectionError as e:
    print('Error', e.args)

 

那么结合我们可以每隔一段时间更新一下代理的话, 那么我们可以这样写:

proxies = []
current_proxy = 0
token = 'xxxxxx' #生成api里的token字段

def get_proxy():
    global proxies
    url = 'http://api.socks5.io/user_get_ip_list?token={token}&type=dc&qty=100&country=&time=5&format=txt&filter=1'
    r = requests.get(url)
    if r.status_code == 200:
        proxies = r.text.split('\n')
    else:
        print('error in get_proxy')

 



# 每次获取一个代理
def get_one_proxy():
    if len(proxies) == 0:
        get_proxy()
    global current_proxy
    p = proxies[current_proxy]
    if current_proxy == len(proxies) - 1:
        current_proxy = 0
    if p is not None and p.strip() != '':
        current_proxy += 1
        return p
    else:
        return get_one_proxy()

def test_proxy():
    url = 'https://baidu.com'
    headers = {
        'User-Agent': 'customized ua -- 1.0',
        'X-Requested-With': 'XMLHttpRequest',
    }
    try:
        p = get_one_proxy()
        r = requests.get(url, headers=headers, timeout=5, proxies={'http': f'http://{p}'})
        if r.status_code == 200:
            # process html data from r.text
            with open(filename, 'w') as f:
                f.write(r.text)
                retry = 0
            return r.text
        else:
            print(f'Error: {r.status_code}')
            retry = 0
            return ''

 

 

这样就可以每次更换一个代理的地址来爬网页了。

标签:get,网站,IP,代理,proxy,绕过,proxies,requests
From: https://www.cnblogs.com/Stephen/p/18148714

相关文章

  • proxifier+v2代理软件实现真全局代理(防溯源)
    v2的使用这里就不详细说了打开v2,右下角可以看到端口开启v2代理后,打开proxifer先打开左上角的代理服务器按照以下配置,端口改成v2上面看到的socks5端口也可以左下角检查以下代理有没有问题,有时候可能是代理服务器卡了或者死了接着来到代理规则,按照以下配置......
  • ASP.NET MVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(1)
    ASP.NETMVC4.0+EF+LINQ+bui+bootstrap+网站+角色权限管理系统(1) 本系列的的角色权限管理主要采用Dotnet MVC4工程内置的权限管理模块Simplemembership实现,主要有关文件是InitializeSimpleMembershipAttribute.cs和AccountModels.cs下面是对这两个文件的了解和改造 WebSe......
  • ASP.NET MVC4.0+EF+LINQ+bui+网站+角色权限管理系统(6)
    ASP.NETMVC4.0+EF+LINQ+bui+网站+角色权限管理系统(6) 快过年了,公司事情忙,好几天没有继续写博客,今天开始写账户模块系统登录,账户管理以及登录日志,首先新建登录日志数据表: ViewCode然后更改模型:AccountModels.cs ViewCode创建登录日志模型:M_UsersLoginLogs.cs View......
  • 国内chatGPT中文版网站有哪些?国内人工智能百花齐放!该如何选择?
    人工智能技术在中国的快速发展和普及,使得国内的人工智能产业日益壮大。在这些领域中,自然语言处理技术和聊天机器人已经取得了显著的进展。ChatGPT作为一种基于深度学习的聊天机器人模型,在国内得到了广泛的关注和应用。目前,有几个国产ChatGPT中文版网站备受瞩目。国产chatGPT汇总:......
  • Ubuntu 命令行工具使用代理的三种方式
    终端默认是不走代理的,即使我们已经打开了网络代理客户端的“全局代理”。用curl或wget下载GitHub上的文件时出现的443错误就是没有挂代理导致的。使用环境变量(推荐)很多Linux和Unix命令行工具(比如curl,wget,lynx等)使用名为http_proxy,https_proxy,ftp_proxy的环......
  • 便宜又好用的免费服务器-搭建网站必备!优惠服务器,你值得拥有!
    ++书谷网库++服务器收录大全便宜又好用的免费服务器——搭建网站必备!优惠服务器,你值得拥有!在数字化时代的浪潮中,拥有一个属于自己的网站已经成为个人、企业乃至机构展示自身形象、推广产品和服务的重要途径。然而,对于许多初学者和小型企业来说,搭建网站的成本和难度常常成为阻碍他......
  • 免费PHP服务器-轻松搭建网站,快速响应,稳定高速!
    免费的PHP服务器对于初学者和小型项目来说可能是一个吸引人的选择,但需要注意的是,免费的服务往往有一些限制和潜在的风险。在选择免费PHP服务器时,请务必考虑以下几点:++书谷网库++免费服务器收录大全性能限制:免费服务器往往有资源限制,如CPU、内存和存储空间的限制。这可能导致网站......
  • java动态代理模式
    Java动态代理模式是Java编程语言中的一种设计模式,它提供了一种在运行时动态创建代理对象的方式。这个模式主要用于实现AOP(面向切面编程)的概念,允许开发者在不修改原有业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理、权限验证等。在Java中,动态代理模式主要依赖于java.l......
  • 免费去水印的网站推荐
    1、https://quququ.cn  2、https://zh-cn.aiseesoft.com/watermark-remover-online/ ......
  • VuePress搭建文档网站
    VuePress官方文档:https://v2.vuepress.vuejs.org/zh/guide/getting-started.html以下是官方文档复制过来的步骤,加上了我的一些经验注释。1、依赖环境Node.jsv18.16.0+(我试了v14是运行不了的,必须这个版本及以上,建议安装nvm,方便切换node版本)包管理器,如pnpm、yarn、npm等(我安......