zoukankan      html  css  js  c++  java
  • 爬虫-ip代理

    代理(proxy)

    • 代理服务器:实现请求转发,从而可以实现更换请求的ip地址

    • 代理的匿名度:

      • 透明:服务器知道你使用了代理并且知道你的真实ip
      • 匿名:服务器知道你使用了代理,但是不知道你的真实ip
      • 高度匿名(高匿):服务器不知道你使用了代理,更不知道你的真实ip
    • 代理的类型:

      • http:该类型的代理只可以转发http协议的请求
      • https:只可以转发https协议的请求
    • requests请求中更换ip:

      在requests添加一个参数 proxies={'http/https':'ip:port'}

      import requests
      headers = {
          'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
      }
      url = 'https://www.baidu.com/s?wd=ip'
      #proxies={'http/https':'ip:port'}
      page_text = requests.get(url=url,headers=headers,proxies={'https':'1.197.203.187:9999'}).text
      with open('ip.html','w',encoding='utf-8') as fp:
          fp.write(page_text)
      
    • 免费代理ip的网站

    • 在爬虫中遇到ip被禁掉如何处理?

      • 使用代理
      • 构建一个代理池
      • 拨号服务器
    • 代理池构建

      #基于代理精灵构建一个ip池
      from lxml import etree
      all_ips = [] # 列表形式的代理池
      proxy_url = 'http://t.11jsq.com/index.php/api/entry?method=proxyServer.generate_api_url&packid=1&fa=0&fetch_key=&groupid=0&qty=52&time=1&pro=&city=&port=1&format=html&ss=5&css=&dt=1&specialTxt=3&specialJson=&usertype=2'  # 代理ip地址
      proxy_page_text = requests.get(url=proxy_url,headers=headers).text
      tree = etree.HTML(proxy_page_text)
      proxy_list = tree.xpath('//body//text()')
      for ip in proxy_list:
          dic = {'https':ip}
          all_ips.append(dic)
      all_ips
      
      import random
      
      #爬取西祠代理中的免费代理ip
      url = 'https://www.xicidaili.com/nn/%d'
      free_proxies = []
      for page in range(1,30):
          new_url = format(url%page)
          page_text = requests.get(new_url,headers=headers,proxies=random.choice(all_ips)).text
          tree = etree.HTML(page_text)
          tr_list = tree.xpath('//*[@id="ip_list"]//tr')[1:]#xpath表达式中不可以出现tbody
          for tr in tr_list:
              ip = tr.xpath('./td[2]/text()')[0]
              port = tr.xpath('./td[3]/text()')[0]
              t_type = tr.xpath('./td[7]/text()')[0]
              
              dic = {
                  'ip':ip,
                  'port':port,
                  'type':t_type
              }
              free_proxies.append(dic)
          print('第{}页爬取完毕!!!'.format(page))
      print(len(free_proxies))
      
  • 相关阅读:
    【基础算法-模拟-例题-*校长的问题】-C++
    【基础算法模拟+例题】-C++
    Chrome开发者调试工具 //TODO
    Javascript面试题&知识点汇总(持续汇总...)
    HTML面试题&知识点汇总(持续汇总...)
    零基础学习Web前端开发
    UML
    江西财经大学第一届程序设计竞赛 F
    江西财经大学第一届程序设计竞赛 E
    江西财经大学第一届程序设计竞赛 D
  • 原文地址:https://www.cnblogs.com/bigox/p/10758957.html
Copyright © 2011-2022 走看看