Python代理IP爬虫的新手使用教程

  


  

  

Python爬虫要经历爬虫,爬虫被限制,爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初级阶段,添加标题和ip代理可以解决很多问题。
  

  

本人自己在爬取豆瓣读书的时候,就以为爬取次数过多,直接被封了IP。后来就研究了代理IP的问题。
  

  

(当时不知道什么情况,差点心态就崩了…),下面给大家介绍一下我自己代理IP爬取数据的问题,请大家指出不足之处。

  


  

  

这是我的IP被封了,一开始好好的,我还以为是我的代码问题了

  

 Python代理IP爬虫的新手使用教程

  


  

  

从网上查找了一些关于爬虫代理IP的资料,得到下面的思路

  
      <李>爬取一些IP,过滤掉不可用。   <李>在请求的请求的代理参数加入对应的IP。   <李>继续爬取。   <李>收工李   <李>好吧,都是废话,理论大家都懂,上面直接上代码…   
  

思路有了,动手起来。
  

  

  

Python 3.7, Pycharm
  

  

这些需要大家直接去搭建好环境……
  

  

  
      <李>爬取IP地址的网站(国内高匿代理)   <李>校验IP地址的网站李   <李>你之前被封IP的py爬虫脚本…   
  

上面的网址看个人的情况来选取
  

  


  

  

PS:简单的使用bs4获取IP和端口号,没有啥难度,里面增加了一个过滤不可用IP的逻辑
  

  

关键地方都有注释了
  

        # !/usr/bin/env python3   # - * -编码:utf - 8 - *   # @Time: 2018/11/22   # @Author: liangk   # @Site:   # @File: auto_archive_ios.py   # @Software: PyCharm         进口的要求   从bs4进口BeautifulSoup   进口json         类GetIp(对象):   ””“抓取代理IP”“”      def __init__(自我):   ”““初始化变量”“”   自我。url=' http://www.xicidaili.com/nn/'   自我。check_url=' https://www.ip.cn/'   自我。ip_list=[]      @staticmethod   def get_html (url):   ”“请求html页面信息”“   头={   “用户代理”:“Mozilla/5.0 (Windows NT 10.0;Win64;AppleWebKit x64)/537.36 (KHTML,像壁虎)Chrome/70.0.3538.77 Safari/537.36”   }   试一试:   请求=请求。得到(url=url,标题=头)   请求。utf - 8编码=' '   html=request.text   返回的html   除了例外e:   回报”      def get_available_ip(自我、ip_address ip_port):   ”““检测IP地址是否可用“”“   头={   “用户代理”:“Mozilla/5.0 (Windows NT 10.0;Win64;AppleWebKit x64)/537.36 (KHTML,像壁虎)Chrome/70.0.3538.77 Safari/537.36”   }   ip_url_next='://+ ip_address +‘:’+ ip_port   代理={“http”:“http”+ ip_url_next,“https”:“https”+ ip_url_next}   试一试:   r=requests.get(自我。check_url header=头,=3=代理,代理超时)   html=r.text   除了:   打印('失败——% s ' % ip_address)   其他:   打印('成功——% s ' % ip_address)   汤=BeautifulSoup (html、lxml的)   div=soup.find (class_='好')   如果div:   打印(div.text)   ip_info={“地址”:ip_address,“港”:ip_port}   self.ip_list.append (ip_info)      def主要(自我):   ””“主方法”“”   web_html=self.get_html (self.url)   汤=BeautifulSoup (web_html lxml的)   ip_list=soup.find (id=癷p_list”) .find_all (tr)   在ip_list ip_info:   td_list=ip_info.find_all (td)   如果len (td_list)比;0:   ip_address=td_list [1]。text   ip_port=td_list [2]。text   #检测IP地址是否有效   自我。get_available_ip (ip_address ip_port)   #写入有效文件   张开(“ip。txt”、“w”)文件:   json.dump(自我。ip_list、文件)   打印(self.ip_list)         #程序主入口   if __name__==癬_main__”:   get_ip=GetIp ()   get_ip.main ()      


  

  

PS:主要是通过使用随机的IP来爬取,根据request_status来判断这个IP是否可以用。
  

  

<强>为什么要这样判断& # 63;
  

  

主要是虽然上面经过了过滤,但是不代表在你爬取的时候是可以用的,所以还是得多做一个判断。

Python代理IP爬虫的新手使用教程