爬虫入门经典(六) | 一文带你深入了解为什么使用代理IP及其如何使用

2020-10-30 14:10发布

一、为什么使用代理IP

14

我们在做爬虫的过程中经常会遇到以下情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么美好,然而一杯茶的功夫可能就会出现错误,比如403 Forbidden,可能会看到“您的IP访问频率太高”这样的提示。出现这种现象的原因是网站采取了一些反爬虫措施。比如,服务器会检测某个IP在单位时间内的请求次数,如果超过了这个阈值,就会直接拒绝服务,返回一些错误信息,这种情况可以称为封IP。

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

这个时候就用到代理IP了,说到代理IP下面就需要先基本原理、代理的作用。

1、基本原理

代理实际上指的就是代理服务器,英文叫作proxy server,它的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站。在我们正常请求一个网站时,是发送了请求给Web服务器,Web服务器把响应传回给我们。如果设置了代理服务器,实际上就是在本机和服务器之间搭建了一个桥,此时本机不是直接向Web服务器发起请求,而是向代理服务器发出请求,请求会发送给代理服务器,然后由代理服务器再发送给Web服务器,接着由代理服务器再把Web服务器返回的响应转发给本机。这样我们同样可以正常访问网页,但这个过程中Web服务器识别出的真实IP就不再是我们本机的IP了,就成功实现了IP伪装,这就是代理的基本原理。

3

2、代理的作用

  • 突破自身IP访问限制,访问一些平时不能访问的站点。

  • 访问一些单位或团体内部资源:比如使用教育网内地址段免费代理服务器,就可以用于对教育网开放的各类FTP下载上传,以及各类资料查询共享等服务。

  • 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度。

  • 隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。对于爬虫来说,我们用代理就是为了隐藏自身IP,防止自身的IP被封锁。

二、如何使用代理IP

15
如何使用代理IP主要看你用什么语言写的爬虫,使用什么框架,使用代理是一种基本的业务需求,基本上所有爬虫都会内置支持。

一提到使用代理IP ,就不得不说是使用免费IP还是花钱使用高匿代理。这个东西主要还是看个人了,如果对ip要求不高,你可以选择使用网上免费的开放代理,自己建一个程序维护一个ip池,爬取一些代理网站的免费ip,加一道测试程序,如果测试可以用,就把它收集起来供爬虫使用。不过免费代理可用率实在是太低,而且不是很稳定,经常会失效,条件允许的话强烈建议花点钱选择收费的私密代理。

PS:经常使用的西刺代理已经挂掉了,打开网页之后,我们会发现已经无法访问了
4
便宜没好货,更别说免费的,免费的代理现在好用的博主暂时也不知道。不过可以找那种免费试用的。博主测试用的是芝麻代理,如果只是测试的话可以领取每日免费IP
5
下图为获取到的代理IP
6
好了,代理ip已经获取完毕了,下面我们是不是需要找一个测试网站,下面博主给出一个专门测试的网站:https://httpbin.org/
7
打开网页之后,我们可以看到ip为本机ip,下面我们通过添加代理ip进行访问并查看结果。

下面通过代码进行实现:

# encoding: utf-8'''
  @author 李华鑫
  @create 2020-10-06 15:57
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: 代理ip.py
  @Version:1.0
  
'''import requests

proxies = {
    "https":"https://58.218.200.247:9934"}response = requests.request(method="get",url="https://httpbin.org/get",proxies=proxies)print(response.text)12345678910111213141516171819

8
????,测试完毕。说明能够使用 。下面我们再来看下刚才没有看到的部分
9
在上述三者,以博主现在的水平并不能给出完美的解释,不过我们直接使用独享IP或隧道IP即可。

三、自动提取代理

上述代码虽然已经实现代理IP的作用,但是我们想想,如果这个IP被网站封了以后,我们再次手动刷新会不会很麻烦,既然这样,我们能不能让其能够自动提取代理呢?话不多说,开整。

想要实现自动提取代理,我们首先需要对生成的链接进行分析:

我们先通过多次刷新 发现我们刷新页面需要等待3秒钟,否则将会获取失败
10
分析完之后,我们再来分析链接: 再打开链接之后,我们通过开发者选项进行查看
11
通过查看我们发现我们需要的ip和端口号已经找到了,这个时候我们可以通过分别提取然后通过字符串拼接的方式,得到我们需要的样式代码如下:

def get_proxies():
    #这里获取的芝麻HTTP代理http https\\
    time.sleep(3)
    proxies = {
        "http": "",
        "https": ""
    }
    response = requests.get("http://http.tiqu.alicdns.com/getip3?num=1&type=2&pro=&city=0&yys=0&port=11&time=1&ts=0&ys=0&cs=1&lb=1&sb=0&pb=45&mr=2&regions=")
    content = response.json()
    print(content)
    proxies["https"] = content["data"][0]["ip"]+":"+str(content["data"][0]["port"])
    print(proxies)
    return proxies12345678910111213

这是我们看下结果,是不是我们想要的:
12
13

????,完美!

分析完成,下面看下最终代码及效果图:

#!/usr/bin/env python# encoding: utf-8'''
  @author 李华鑫
  @create 2020-10-06 16:31
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: 自动提取代理.py
  @Version:1.0
  
'''import requestsimport timedef get_proxies():
    #这里获取的芝麻HTTP代理http https\\
    time.sleep(3)
    proxies = {
        "http": "",
        "https": ""
    }
    response = requests.get("http://http.tiqu.alicdns.com/getip3?num=1&type=2&pro=&city=0&yys=0&port=11&time=1&ts=0&ys=0&cs=1&lb=1&sb=0&pb=45&mr=2&regions=")
    content = response.json()
    print(content)
    proxies["https"] = content["data"][0]["ip"]+":"+str(content["data"][0]["port"])
    print(proxies)
    return proxies

proxies = get_proxies()response = requests.request(method="get",url="https://httpbin.org/get",proxies=proxies)print(response.text)1234567891011121314151617181920212223242526272829303132

14
17
美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!

转载自:CSDN   作者:不温卜火

原文链接:https://buwenbuhuo.blog.csdn.net/article/details/109235716