pythonは代理IPをはり取り、有効なIPテストを実施します。
クロージングプロキシIPおよびテストは利用可能ですか?
多くの人が爬虫類の時にIPを封鎖されることを防止するために、各大網駅に行って無料のプロキシIPを探します。すべてのIPアドレスが有効ではないので、一つの割合に入ると効率が低いです。私もこのような状況に遭遇しました。最後に有効なIPを返します。
ここで私が選んだのは89無料代理のIPサイトです。そして各IPを比較テストして、最後に利用できるIPを別のリストに保存します。
https://www.89ip.cn/
一、準備工作
パッケージをインポートして、ヘッダラベルを設定します。
ホームページのソースを抽出して返したのは、ウェブサイト全体のHTMLです。
関数から入ってきたパラメータはHTMLとIPアドレスを保存するリストです。
ここでIPをテストする原理はrequestsでBaiduのウェブサイトを要求して、そしてプロキシIPに着信して、もしウェブサイトが状態コードを返すのが200ならばこのIPが有効であると説明して、もし他の情況があるならばIPアドレスが無効だと判断します。
メイン関数では、呼び出し関数とカスタマイズページ数指定のURLを生成し、プログラム終了前に有効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テストを実施している文章について紹介します。これまでの記事を検索したり、以下の関連記事を見たりしてください。これからもよろしくお願いします。