Day 14 14.2 代理IP

代理IP

代理IP:反反爬使用代理ip是非常必要的一种反反爬的方式,但是即使使用了代理ip,对方服务器任然会有很多的方式来检测我们是否是一个爬虫,比如:一段时间内,检测IP访问的频率,访问太多频繁会屏蔽;检查Cookie,User-Agent,Referer等header参数,若没有则屏蔽;服务方购买所有代理提供商,加入到反爬虫数据库里,若检测是代理则屏蔽等。所以更好的方式在使用代理ip的时候使用随机的方式进行选择使用,不要每次都用一个代理ip

什么是代理

  • 代理服务器

代理服务器的作用

  • 就是用来转发请求和响应

在爬虫中为何需要使用代理?

  • 有些时候,需要对网站服务器发起高频的请求,网站的服务器会检测到这样的异常现象,则会讲请求对应机器的ip地址加入黑名单,则该ip再次发起的请求,网站服务器就不在受理,则我们就无法再次爬取该网站的数据。
  • 使用代理后,网站服务器接收到的请求,最终是由代理服务器发起,网站服务器通过请求获取的ip就是代理服务器的ip,并不是我们客户端本身的ip。

代理的匿名度

  • 透明:网站的服务器知道你使用了代理,也知道你的真实ip
  • 匿名:网站服务器知道你使用了代理,但是无法获知你真实的ip
  • 高匿:网站服务器不知道你使用了代理,也不知道你的真实ip(推荐)

代理的类型(重要)

  • http:该类型的代理服务器只可以转发http协议的请求
  • https:可以转发https协议的请求

如何获取代理?

如何使用代理?

  • 测试:访问如下网址,返回自己本机ip

    import requests
    from lxml import etree
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
    }
    url = 'https://www.sogou.com/web?query=ip'
    page_text = requests.get(url=url,headers=headers).text
    tree = etree.HTML(page_text)
    data = tree.xpath('//*[@id="ipsearchresult"]/strong/text()')[0]
    print(data)
  • 使用代理发起请求,查看是否可以返回代理服务器的ip

    import requests
    from lxml import etree
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36',
    }
    url = 'https://www.sogou.com/web?query=ip'
    #使用代理服务器发起请求
    #proxies={'代理类型':'ip:port'}
    page_text = requests.get(url=url,headers=headers,proxies={'https':'ip:port'}).text
    tree = etree.HTML(page_text)
    data = tree.xpath('//*[@id="ipsearchresult"]/strong/text()')[0]
    print(data)
  • 深度测试:

    • 对快代理进行n次请求,直到本机无法访问快代理为止(证明本机ip被快代理封掉了)

    • 构建一个代理池(封装了很多代理ip和端口的容器),用于数据的批量爬取

      from bs4 import BeautifulSoup
      from lxml import etree
      import requests
      import time
      import random
      headers = {
          'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
      }
      #构建一个代理池
      proxy_url = 'http://webapi.http.zhimacangku.com/getip?num=15&type=2&pro=&city=0&yys=0&port=1&pack=213751&ts=0&ys=0&cs=0&lb=6&sb=-&pb=4&mr=1&regions='
      json_data = requests.get(url=proxy_url,headers=headers).json()
      json_list = json_data['data']
      proxy_list = [] #代理池,每次请求,可以随机从代理池中选择一个代理来用
      for dic in json_list:
          ip = dic['ip']
          port = dic['port']
          n_dic = {
              'https':ip+':'+str(port) # {'https':'111.1.1.1:1234'}
          }
          proxy_list.append(n_dic)
      
      #爬取多页
      #1.创建一个通用的url(可以变换成任意页码的url)
      url = 'https://www.kuaidaili.com/free/inha/%d/'
      #2.通过循环以此生成不同页码的url
      for page in range(1,4):
          print('----------正在爬取第%d页的数据!-----------'%page)
          #format用来格式化字符串的(不可以修改url这个字符串本身)
          new_url = format(url%page)
          #循环发送每一页的请求
          #注意:get方法是一个阻塞方法!
          page_text = requests.get(url=new_url,headers=headers,proxies=random.choice(proxy_list)).text
          time.sleep(1)
          soup = BeautifulSoup(page_text,'lxml')
          trs = soup.select('tbody > tr')
          for tr in trs:
              t1 = tr.findAll('td')[0]
              t2 = tr.findAll('td')[1]
              ip = t1.string
              port = t2.string
              print(ip,port)

芝麻代理获取代理方法

1、访问芝麻代理官网:https://jahttp.zhimaruanjian.com/

2、登陆自己的账号

3、领取免费IP

4、在套餐中心可以看到有赠送的ip

5、点击提取IP

  • 选择套餐类型
  • 选择提取数量
  • 选择json格式
  • 生成API链接
  • 复制直连ip到浏览器即可查看到生成的端口号和IP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值