見出し画像

【バージョン更新】Proxy情報収集スクリプトのVer2.1を公開します+α

こんにちは!

前の記事を読んでいない方はこちらをお読みください。
注意事項とかはこちらと共通なので書きません。読まずに起こった責任や損害は私は保証できないので注意深く読んでおいてください。

変更点

重複行や空白行を削除する機能をつけました。
・収集先に新たにProxyサイトを2つ追加しました。(Ver2.0)
・「1.Aからの採集が完了しました。」 など収集の進捗状況がわかりやすいように順番を書きました。
・Ver2.1の変更内容は、新たに採集先を20ページ増やしました。それだけです

配布・コード公開

http(s)Proxyを採集する方

コード

import requests
from datetime import datetime
import re
import time
import pytz

print("28のサイトから、自動でHTTP(s) Proxyを取得するプログラムを開始します。\nCreated by Ririka\n(https://misskey.kindworld.one/@KisaragiRirika)\n")

url2 = "https://api.proxyscrape.com/proxytable.php"

response = requests.get(url2)
data = response.json()

http_proxies = data.get("http")

if http_proxies:
    proxies = []
    for proxy, _ in http_proxies.items():
        proxies.append(proxy)

    current_datetime = datetime.now()
    formatted_datetime = current_datetime.strftime('%Y-%m-%d_%H-%M')
    filename = f"httpProxies_{formatted_datetime}.txt"

    with open(filename, "w") as file:
        file.write("\n".join(proxies) + "\n")

    print(f"1.ProxyScrapeからの取得が完了しました。\nProxyを「{filename}」に保存しました。\n")
else:
    print("Proxy情報が見つかりませんでした。")

def extract_proxies(url):
    response = requests.get(url)
    proxy_data = response.text

    pattern = re.compile(r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+\b')

    proxy_list = re.findall(pattern, proxy_data)
    return proxy_list

proxy_url = "https://raw.githubusercontent.com/roosterkid/openproxylist/main/HTTPS.txt"

proxies = extract_proxies(proxy_url)

def append_proxies_to_file(filename, proxy_list):
    with open(filename, "a") as file:
        file.write("\n".join(proxy_list) + "\n")

append_proxies_to_file(filename, proxies)

print(f"2.RoostarKidからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

proxy_url2 = "https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/http.txt"

http_response = requests.get(proxy_url2)
http_proxies = http_response.text.strip().split("\n")

with open(filename, "a") as file:
   file.write("\n".join(http_proxies) + "\n")

print(f"3.TheSpeedXからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

moscow_timezone = pytz.timezone('Europe/Moscow')
current_datetime_moscow = datetime.now(moscow_timezone)
url_date = current_datetime_moscow.strftime('%Y-%m-%d')

url = f"https://checkerproxy.net/api/archive/{url_date}"
response = requests.get(url)
data = response.json()

proxy_list = []

for record in data:
    proxy_type = record.get("type")
    addr = record.get("addr")
    if proxy_type in [1, 2, 5] and addr:
        proxy_list.append(addr)

with open(filename, "a") as file:
    file.write("\n".join(proxy_list) + "\n")

print(f"4.CheckerProxyからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

def extract_proxy_info(url):
    response = requests.get(url)
    data = response.json()

    proxy_list = []

    for entry in data.get("LISTA", []):
        ip = entry.get("IP")
        port = entry.get("PORT")
        if ip and port:
            proxy_list.append(f"{ip}:{port}")

    return proxy_list

http_url = "https://www.proxy-list.download/api/v2/get?l=en&t=http"
https_url = "https://www.proxy-list.download/api/v2/get?l=en&t=https"

http_proxies = extract_proxy_info(http_url)
https_proxies = extract_proxy_info(https_url)

with open(filename, "a") as file:
    file.write("\n".join(http_proxies + https_proxies) + "\n")

print(f"5.Proxy-listからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

http_url = "https://freeproxyupdate.com/files/txt/http.txt"
https_url = "https://freeproxyupdate.com/files/txt/https-ssl.txt"

proxy_pattern = re.compile(r'\b(?:\d{1,3}\.){3}\d{1,3}:\d+\b')

response = requests.get(http_url)
http_proxies = re.findall(proxy_pattern, response.text)

with open(filename, "a") as file:
    for proxy in http_proxies:
        file.write(proxy + "\n")

response = requests.get(https_url)
https_proxies = re.findall(proxy_pattern, response.text)

with open(filename, "a") as file:
    for proxy in https_proxies:
        file.write(proxy + "\n")

print(f"6.FreeProxyUpdateからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

url = "https://api.openproxy.space/lists/http"
response = requests.get(url)
data = response.json()

with open(filename, "a") as file:
    for item in data.get("data", []):
        for proxy in item.get("items", []):
            file.write(proxy + "\n")

print(f"7.OpenProxyからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n\n大量のtxt形式のProxy listからまとめて取得する関数を始動します。")

def get_and_append_proxies_from_url(url, filename):
    proxies = extract_proxies(url)
    append_proxies_to_file(filename, proxies)
    print(f"{url}\nからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

new_proxy_urls = [
    "https://raw.githubusercontent.com/mmpx12/proxy-list/master/http.txt",
    "https://api.openproxylist.xyz/http.txt",
    "https://raw.githubusercontent.com/sunny9577/proxy-scraper/master/proxies.txt",
    "https://raw.githubusercontent.com/jetkai/proxy-list/main/online-proxies/txt/proxies-http.txt",
    "https://raw.githubusercontent.com/shiftytr/proxy-list/master/proxy.txt",
    "https://raw.githubusercontent.com/ShiftyTR/Proxy-List/master/http.txt",
    "https://raw.githubusercontent.com/monosans/proxy-list/main/proxies_anonymous/http.txt",
    "https://raw.githubusercontent.com/monosans/proxy-list/main/proxies/http.txt",
    "https://proxy-spider.com/api/proxies.example.txt",
    "https://multiproxy.org/txt_all/proxy.txt",
    "https://proxyspace.pro/http.txt",
    "https://proxyspace.pro/https.txt",
    "https://alexa.lr2b.com/proxylist.txt",
    "https://api.openproxylist.xyz/http.txt",
    "https://rootjazz.com/proxies/proxies.txt",
    "https://sheesh.rip/http.txt",
    "https://raw.githubusercontent.com/proxy4parsing/proxy-list/main/http.txt",
    "https://raw.githubusercontent.com/opsxcq/proxy-list/master/list.txt",
    "https://raw.githubusercontent.com/clarketm/proxy-list/master/proxy-list-raw.txt",
    "https://raw.githubusercontent.com/B4RC0DE-TM/proxy-list/main/HTTP.txt"
]

for idx, new_url in enumerate(new_proxy_urls, start=8):
    print(f"{idx}.{new_url}\nからの取得を開始します。")
    get_and_append_proxies_from_url(new_url, filename)

def extract_proxies2(url):
    response = requests.get(url)
    proxy_data = response.text

    pattern = re.compile(r'\b(?:\d{1,3}\.){3}\d{1,3}:\d+\b')
    proxy_list = re.findall(pattern, proxy_data)

    return proxy_list

proxy_url = "https://spys.me/proxy.txt"

proxies = extract_proxies2(proxy_url)

append_proxies_to_file(filename, proxies)

print(f"28.Spysmeからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

def count_lines_in_file(filename):
    with open(filename, "r") as file:
        line_count = sum(1 for line in file)
    return line_count

def remove_duplicates_and_empty_lines(filename):
    with open(filename, "r") as file:
        lines = file.readlines()

    unique_lines = set()
    clean_lines = []

    for line in lines:
        line = line.strip()
        if line and line not in unique_lines:
            unique_lines.add(line)
            clean_lines.append(line)

    with open(filename, "w") as file:
        file.write("\n".join(clean_lines))

remove_duplicates_and_empty_lines(filename)

print("重複行や空白の行を削除しました。")

line_count = count_lines_in_file(filename)

print(f"全てのProxy情報の取得が完了しました。取得できたHTTP(s) Proxyの数: {line_count}\nProxyリストを「{filename}」に保存しました。3秒後に終了します。")
time.sleep(3)

Socks4&5を採集する方

コード

import requests
from datetime import datetime
import re
import time
import pytz

print("9つのサイトから、自動でSocks4&5 Proxyを取得するプログラムを開始します。\nCreated by Ririka\n(https://misskey.kindworld.one/@KisaragiRirika)\n")

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0',
    'Accept': '*/*',
    'Accept-Language': 'ja,en-US;q=0.7,en;q=0.3',
    'Referer': 'https://www.proxyrack.com/',
    'Origin': 'https://www.proxyrack.com',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-site',
    'Sec-GPC': '1',
}

params = {
    'perPage': '0',
    'offset': '0',
}

url = "https://proxyfinder.proxyrack.com/proxies.json?perPage=0&offset=0"

response = requests.get(url, params=params, headers=headers)
data = response.json()

proxies = []

for record in data['records']:
    ip = record.get('ip')
    port = record.get('port')
    if ip and port:
        proxies.append(f"{ip}:{port}")

current_datetime = datetime.now()
formatted_datetime = current_datetime.strftime('%m-%d_%H-%M')
filename = f"SocksProxies_{formatted_datetime}.txt"

with open(filename, "w") as file:
    file.write("\n".join(proxies) + "\n")

print(f"1.ProxyRackからの取得が完了しました。\nProxyリストを「{filename}」に保存しました。\n")

url = "https://api.proxyscrape.com/proxytable.php"

response = requests.get(url)
data = response.json()

socks4_proxies = data.get("socks4")
socks5_proxies = data.get("socks5")

all_socks_proxies = []

if socks4_proxies:
    all_socks_proxies.extend(socks4_proxies.keys())

if socks5_proxies:
    all_socks_proxies.extend(socks5_proxies.keys())

if all_socks_proxies:

    with open(filename, "a") as file:
        file.write("\n".join(all_socks_proxies) + "\n")

    print(f"2.ProxyScrapeからのProxy取得が完了しました。\nProxyを「{filename}」に追記しました。\n")
else:
    print("Proxy情報が見つかりませんでした。")

socks4_url = "https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks4.txt"
socks5_url = "https://raw.githubusercontent.com/TheSpeedX/PROXY-List/master/socks5.txt"

socks4_response = requests.get(socks4_url)
socks4_proxies = socks4_response.text.strip().split("\n")

socks5_response = requests.get(socks5_url)
socks5_proxies = socks5_response.text.strip().split("\n")

all_socks_proxies = socks4_proxies + socks5_proxies

if all_socks_proxies:
    with open(filename, "a") as file:
        file.write("\n".join(all_socks_proxies) + "\n")

    print(f"3.TheSpeedXからのProxy取得が完了しました。\nProxyを「{filename}」に追記しました。\n")
else:
    print("取得したProxy情報が見つかりませんでした。")

def extract_proxies(url):
    response = requests.get(url)
    proxy_data = response.text

    pattern = re.compile(r'\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+\b')

    proxy_list = re.findall(pattern, proxy_data)
    return proxy_list

socks4_url = "https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS4.txt"
socks5_url = "https://raw.githubusercontent.com/roosterkid/openproxylist/main/SOCKS5.txt"

socks4_proxies = extract_proxies(socks4_url)
socks5_proxies = extract_proxies(socks5_url)

def append_proxies_to_file(filename, proxy_list):
    with open(filename, "a") as file:
        file.write("\n".join(proxy_list) + "\n")

append_proxies_to_file(filename, socks4_proxies)
append_proxies_to_file(filename, socks5_proxies)

print(f"4.RoosterKidからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

page_number = 1

def get_proxy_data(page_number):
    url = f"https://proxylist.geonode.com/api/proxy-list?limit=500&page={page_number}&sort_by=lastChecked&sort_type=desc"
    response = requests.get(url)
    data = response.json()
    return data

def extract_proxies2(data):
    proxies = []
    for record in data["data"]:
        ip = record.get("ip")
        port = record.get("port")
        if ip and port:
            proxy = f"{ip}:{port}"
            proxies.append(proxy)
    return proxies

print("※GeonodeからProxy情報を取得するのには少し時間がかかりますが、気長にお待ちください。\n")

while True:
    data = get_proxy_data(page_number)
    if not data["data"]:
        print(f"\n5.Geonodeからの取得が完了しました。\nProxyリストを「{filename}」に保存しました。\n")
        break

    proxies = extract_proxies2(data)
    with open(filename, "a") as file:
        file.write("\n".join(proxies) + "\n")
    
    print(f"GeonodeのAPIから、ページ {page_number} のProxy情報を取得して追記しました。")
    
    page_number += 1

moscow_timezone = pytz.timezone('Europe/Moscow')
current_datetime_moscow = datetime.now(moscow_timezone)
url_date = current_datetime_moscow.strftime('%Y-%m-%d')

url = f"https://checkerproxy.net/api/archive/{url_date}"
response = requests.get(url)
data = response.json()

proxy_list = []

for record in data:
    proxy_type = record.get("type")
    addr = record.get("addr")
    if proxy_type in [4] and addr:
        proxy_list.append(addr)

with open(filename, "a") as file:
    file.write("\n".join(proxy_list) + "\n")

print(f"6.CheckerProxyからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

def extract_proxy_info(url):
    response = requests.get(url)
    data = response.json()

    proxy_list = []

    for entry in data.get("LISTA", []):
        ip = entry.get("IP")
        port = entry.get("PORT")
        if ip and port:
            proxy_list.append(f"{ip}:{port}")

    return proxy_list

socks4_url = "https://www.proxy-list.download/api/v2/get?l=en&t=socks4"
socks5_url = "https://www.proxy-list.download/api/v2/get?l=en&t=socks5"

socks4_proxies = extract_proxy_info(socks4_url)
socks5_proxies = extract_proxy_info(socks5_url)

with open(filename, "a") as file:
    file.write("\n".join(socks4_proxies + socks5_proxies))

print(f"7.Proxy-listからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

socks4_url = "https://freeproxyupdate.com/files/txt/socks4.txt"
socks5_url = "https://freeproxyupdate.com/files/txt/socks5.txt"

proxy_pattern = re.compile(r'\b(?:\d{1,3}\.){3}\d{1,3}:\d+\b')

response = requests.get(socks4_url)
http_proxies = re.findall(proxy_pattern, response.text)

with open(filename, "a") as file:
    for proxy in http_proxies:
        file.write(proxy + "\n")

response = requests.get(socks5_url)
https_proxies = re.findall(proxy_pattern, response.text)

with open(filename, "a") as file:
    for proxy in https_proxies:
        file.write(proxy + "\n")

print(f"8.FreeProxyUpdateからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

url = "https://api.openproxy.space/lists/socks4"
response = requests.get(url)
data = response.json()

with open(filename, "a") as file:
    for item in data.get("data", []):
        for proxy in item.get("items", []):
            file.write(proxy + "\n")

url = "https://api.openproxy.space/lists/socks5"
response = requests.get(url)
data = response.json()

with open(filename, "a") as file:
    for item in data.get("data", []):
        for proxy in item.get("items", []):
            file.write(proxy + "\n")

print(f"9.OpenProxyからの取得が完了しました。\nProxyを「{filename}」に追記しました。\n")

def count_lines_in_file(filename):
    with open(filename, "r") as file:
        line_count = sum(1 for line in file)
    return line_count

def remove_duplicates_and_empty_lines(filename):
    with open(filename, "r") as file:
        lines = file.readlines()

    unique_lines = set()
    clean_lines = []

    for line in lines:
        line = line.strip()
        if line and line not in unique_lines:
            unique_lines.add(line)
            clean_lines.append(line)

    with open(filename, "w") as file:
        file.write("\n".join(clean_lines))

remove_duplicates_and_empty_lines(filename)

print("重複行や空白の行を削除しました。")

line_count = count_lines_in_file(filename)

print(f"全てのProxy情報の取得が完了しました。取得できたSocks4&5 Proxyの数: {line_count}\nProxyリストを「{filename}」に保存しました。3秒後に終了します。")
time.sleep(3)

重複行を削除するプログラムの単体配布

本体

コード

def remove_duplicate_lines(filename):
    with open(filename, 'r') as file:
        lines = file.readlines()

    unique_lines = set()

    for line in lines:
        if line.strip():
            unique_lines.add(line)

    with open(filename, 'w') as file:
        file.writelines(unique_lines)

filename = input("形式つきでファイル名いれてね :")

remove_duplicate_lines(filename)
print("重複行を削除しました。")

ついでに54,000本ある串も配布

ここに貼れなかったのでコピペ用のは下記のURLに貼りました。

このコードが楽しいこと(意味深)の手助けになれば何よりです、それでは~


いいなと思ったら応援しよう!