pythonは代理IPをはり取り、有効なIPテストを実施します。


クロージングプロキシIPおよびテストは利用可能ですか?
多くの人が爬虫類の時にIPを封鎖されることを防止するために、各大網駅に行って無料のプロキシIPを探します。すべてのIPアドレスが有効ではないので、一つの割合に入ると効率が低いです。私もこのような状況に遭遇しました。最後に有効なIPを返します。
ここで私が選んだのは89無料代理のIPサイトです。そして各IPを比較テストして、最後に利用できるIPを別のリストに保存します。
https://www.89ip.cn/
在这里插入图片描述
一、準備工作
パッケージをインポートして、ヘッダラベルを設定します。

import requests
from bs4 import BeautifulSoup

header = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
}
二、ウェブソースの抽出
ホームページのソースを抽出して返したのは、ウェブサイト全体のHTMLです。

def getHtml(url):
  try:
    reponse = requests.get(url, headers=header)
    reponse.raise_for_status()
    reponse.encoding = reponse.apparent_encoding
    return reponse.text
  except:
    return "        "
三、HTMLを解析し、IPを抽出する
関数から入ってきたパラメータはHTMLとIPアドレスを保存するリストです。

#     ,  IP
def getIp(html, list):
  try:
    soup = BeautifulSoup(html, "html.parser")
    tr = soup.find("tbody").find_all_next("tr")
    for ip in tr:
      #   IP
      td = ip.find_next("td").string
      td = str(td).replace(" ", "").replace("
", "").replace("\t", "") # dk = ip.find_all_next("td")[1].string dk = str(dk).replace(" ", "").replace("
", "").replace("\t", "") # IP ip = td + ":" + dk list.append(ip) # IP except: print(" IP ")
四、IPが使えるかどうかをテストする。
ここでIPをテストする原理はrequestsでBaiduのウェブサイトを要求して、そしてプロキシIPに着信して、もしウェブサイトが状態コードを返すのが200ならばこのIPが有効であると説明して、もし他の情況があるならばIPアドレスが無効だと判断します。

#      IP
def ip_text(list, valid_IP):
  try:
    url = "https://www.baidu.com//"
    for ip in list:
      try:
        rep = requests.get(url, proxies={'https': ip}, headers=header, timeout=0.5)
        if rep.status_code == 200: #          200,     IP    
          valid_IP.append(ip)
          print("   IP  :" + ip)
        else:
          print("   IP  :" + ip)
      except:
        print("   IP  :" + ip)
  except:
    print("IP    ")
五、メイン関数main
メイン関数では、呼び出し関数とカスタマイズページ数指定のURLを生成し、プログラム終了前に有効IPアドレスを出力します。

if __name__ == '__main__':

  valid_IP = [] #   IP  
  for i in range(1, 90): #       
    ip_list = [] #         ip
    url = "https://www.89ip.cn/index_" + str(i) + ".html"
    print(url)
    html = getHtml(url)
    getIp(html, ip_list)
    ip_text(ip_list, valid_IP)

  print("=" * 30)
  print("    ,  IP  :")
  print("-" * 30)
  for a in valid_IP:
    print(a)
  print("=" * 30)
コードの全体的なフレームワークは終了しました。最後にすべてのコードが現れました。
完全コード

# -*- coding: utf-8 -*-
# Author : YRH
# Data : 2020/10/07
# Project :     IP      IP
# Tool : PyCharm

import requests
from bs4 import BeautifulSoup

header = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'
}


#       
def getHtml(url):
  try:
    reponse = requests.get(url, headers=header)
    reponse.raise_for_status()
    reponse.encoding = reponse.apparent_encoding
    return reponse.text
  except:
    return "        "


#     ,  IP
def getIp(html, list):
  try:
    soup = BeautifulSoup(html, "html.parser")
    tr = soup.find("tbody").find_all_next("tr")
    for ip in tr:
      #   IP
      td = ip.find_next("td").string
      td = str(td).replace(" ", "").replace("
", "").replace("\t", "") # dk = ip.find_all_next("td")[1].string dk = str(dk).replace(" ", "").replace("
", "").replace("\t", "") # IP ip = td + ":" + dk list.append(ip) # IP except: print(" IP ") # IP def ip_text(list, valid_IP): try: url = "https://www.baidu.com//" for ip in list: try: rep = requests.get(url, proxies={'https': ip}, headers=header, timeout=0.5) if rep.status_code == 200: # 200, IP valid_IP.append(ip) print(" IP :" + ip) else: print(" IP :" + ip) except: print(" IP :" + ip) except: print("IP ") if __name__ == '__main__': valid_IP = [] # IP for i in range(1, 90): # ip_list = [] # ip url = "https://www.89ip.cn/index_" + str(i) + ".html" print(url) html = getHtml(url) getIp(html, ip_list) ip_text(ip_list, valid_IP) print("=" * 30) print(" , IP :") print("-" * 30) for a in valid_IP: print(a) print("=" * 30)
ここでは、pythonが代理IPを取得し、有効なIPテストを実施している文章について紹介します。これまでの記事を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。