• 爬虫-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))
      
  • 相关阅读:
    leetcode211
    leetcode209
    leetcode201
    leetcode1396
    leetcode1395
    leetcode1394
    leetcode1386
    leetcode1387
    leetcode1382
    leetcode1376
  • 原文地址:https://www.cnblogs.com/bigox/p/10758957.html
Copyright © 2020-2023  润新知