如何筛选免费代理IP

作者:IPIDEA

2022-09-28 11:29:04

通过搜索引擎找到免费ip代理网站,我们爬完之后需要对这些IP测试。因为免费ip代理的可用性相对较低,它是开放的,所以它需要经过以下步骤才能筛选出有用的IP来。

如何筛选免费代理IP.png

1.ip代理验证

由于免费的ip许多代理商不能使用,或不稳定,或时间短。因此,验证ip代理是否可用是非常必要的。主要验证原理:使用ip代理访问网页,判断能否正常访问。我在这里选择的网站是“站长之家”,本网站可直接返回您当前使用的网站ip以及ip所在地。这里需要注意的是,如果访问时间超过一定时间,可以在访问前设置连接超时时间,直接跳过这个ip代理。建议设置在2秒内,具体可见以下函数:

  def ip_test(ip_proxies):

  """

  验证单个ip代理是否可用

  :param ip_proxies: 待验证ip,例如:101.96.10.36:88

  :return:

  """

  url = "http://ip.chinaz.com/"

  headers = {

  "Host": "ip.chinaz.com",

  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0",

  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

  "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",

  "Accept-Encoding": "gzip, deflate",

  "Referer": "https://blog.csdn.net/Winterto1990/article/details/51220307",

  "Connection": "keep-alive",

  "Upgrade-Insecure-Requests": "1",

  "Cache-Control": "max-age=0",

  }

  proxies = {"http": "http://" + ip_proxies, } # 设置代理

  res = requests.get(url, headers=headers, proxies=proxies, timeout=1) # timeout为设定的相应时长,建议在2秒内

  # 解析网页

  soup = BeautifulSoup(res.text, "html.parser")

  info_list = soup.find_all("p", {"class": "getlist pl10"})

  for info in info_list:

  is_local = info.get_text()

  print(info.get_text())

  return is_local.find("XXX.XXX.XXX.XXX") # 判断是否为本地的地址

  2、防止账号关联验证ip代理

  要防止账号关联的对ip代理进行验证,实际上这就是调用上一步中验证ip代理中的程序。具体程序如下:

  def ip_batch_inspection(read_path, save_path):

  """

  验证多个ip代理是否可用

  :param read_path: ip代理文件路径

  :param save_path: 验证可用的ip代理保存路径

  :return:

  """

  with open(read_path, "r") as fr:

  lines = fr.readlines()

  fr.close()

  count = 0

  file_name = read_path.split("/")

  print(file_name[-1] + "文件共有 " + str(len(lines)) + " 条数据")

  for line in lines:

  count += 1

  ip_proxies = line.replace(" ", "")

  try:

  is_local = ip_test(ip_proxies) # 如果是本地ip,返回值为大于0数值

  if is_local < 0:

  with open(save_path, "a") as fs:

  fs.write(ip_proxies + " ")

  except Exception as e:

  pass

  # print("ip不可用")

  print("验证中......%.2f%%" % (count/len(lines)*100))

  print("验证完毕")

  完成上面两步之后,就完成了免费代理IP使用前的准备了,可以放到ip代理池,等到之后需要时候再调用。

*ipidea提供的服务必须在境外网络环境下使用

热门资讯