0 minutes, 43 seconds

发布时间:2024-01-17 17:29:24

下载解压文件后,修改里面的url信息,运行py即可。

附件:



酒店源获取工具.rar

最后一行合并文件功能选择性开启。

代码如下:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
import json
import re
import os

# 网址:https://fofa.info/
# 搜素关键词:"iptv/live/zh_cn.js" && country="CN" && region="Henan" && city="Zhengzhou"

regions = {
    "陕西" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2hhYW54aSI%3D", 
    "湖南" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0i5rmW5Y2XIg%3D%3D", 
    #"河南" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iaGVuYW4i", 
    #"安徽" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iQW5odWki", 
    #"北京" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iQmVpamluZyI%3D", 
    #"重庆" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iQ2hvbmdxaW5nIg%3D%3D", 
    #"贵州" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iR3VpemhvdSI%3D", 
    #"河北" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iSGViZWki", 
    #"湖北" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iSHViZWki", 
    #"江苏" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iSmlhbmdzdSI%3D", 
    #"江西" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iSmlhbmd4aSI%3D", 
    #"辽宁" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iTGlhb25pbmci", 
    #"山东" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2hhbmRvbmci", 
    #"上海" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2hhbmdoYWki", 
    #"山西" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2hhbnhpIg%3D%3D", 
    #"四川" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iU2ljaHVhbiI%3D", 
    #"天津" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iVGlhbmppbiI%3D", 
    #"云南" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iWXVubmFuIg%3D%3D", 
    #"浙江" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIHJlZ2lvbj0iWmhlamlhbmci", 
    #"Zhengzhou" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlpoZW5nemhvdSI%3D",
    #"Xinxiang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlhpbnhpYW5nIg%3D%3D",
    #"Luoyang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9Ikx1b3lhbmci",
    #"Luohe" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9Ikx1b2hlIg%3D%3D",
    #"Xuchang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9Ilh1Y2hhbmci",
    # "Zhoukou" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9Ilpob3Vrb3Ui",
    #"Pingdingshan" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlBpbmdkaW5nc2hhbiI%3D",
    #"Anyang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IkFueWFuZyI%3D",
    #"Shangqiu" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlNoYW5ncWl1Ig%3D%3D",
    #"Zhumadian" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlpodW1hZGlhbiI%3D",
    #"Puyang" : "https://fofa.info/result?qbase64=ImlwdHYvbGl2ZS96aF9jbi5qcyIgJiYgY291bnRyeT0iQ04iICYmIGNpdHk9IlB1eWFuZyI%3D",
}

def process_url(region, url):
    # 创建一个Chrome WebDriver实例
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')

    driver = webdriver.Chrome(options=chrome_options)
    # 使用WebDriver访问网页
    driver.get(url)  # 将网址替换为你要访问的网页地址
    time.sleep(10)
    # 获取网页内容
    page_content = driver.page_source

    # 关闭WebDriver
    driver.quit()

    # 查找所有符合指定格式的网址
    pattern = r"http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+"  # 设置匹配的格式,如http://8.8.8.8:8888
    urls_all = re.findall(pattern, page_content)
    urls = list(set(urls_all))  # 去重得到唯一的URL列表
    for url in urls:
        print(url)
    # 遍历网址列表,获取JSON文件并解析
    results = []
    for url in urls:
        try:
            # 发送GET请求获取JSON文件,设置超时时间为5秒
            json_url = f"{url}/iptv/live/1000.json?key=txiptv"
            response = requests.get(json_url, timeout=5)
            json_data = response.json()

            # 解析JSON文件,获取name和url字段
            for item in json_data['data']:
                if isinstance(item, dict):
                    name = item.get('name')
                    urlx = item.get('url')
                    urld = f"{url}{urlx}"

                    if name and urlx:
                        # 删除特定文字
                        name = name.replace("中央", "CCTV")
                        name = name.replace("高清", "")
                        name = name.replace("标清", "")
                        name = name.replace("频道", "")
                        name = name.replace("-", "")
                        name = name.replace(" ", "")
                        name = name.replace("PLUS", "+")
                        name = name.replace("(", "")
                        name = name.replace(")", "")
                        results.append(f"{name},{urld}")
        except requests.exceptions.RequestException as e:
            print(f"Failed to process JSON for URL {json_url}. Error: {str(e)}")
            continue
        except json.JSONDecodeError as e:
            print(f"Failed to parse JSON for URL {url}. Error: {str(e)}")
            continue

    return results
    
# 将结果保存到文本文件
def save_results(results, filename):
    with open(filename, "w", encoding="utf-8") as file:
        for result in results:
            file.write(result + "\n")
            print(result)

directory = "地区源"
    
# 文件目录不存在,则创建文件目录        
if not os.path.exists(directory):
    os.makedirs(directory)    
    # 删除旧文件
existing_files = os.listdir(directory)
for file_name in existing_files:
    file_path = os.path.join(directory, file_name)
    if os.path.isfile(file_path):
        os.remove(file_path)

for region, url in regions.items():
    results = process_url(region, url)
    save_results(results, os.path.join(directory, f"{region}.txt"))

# 合并结果成一个文件
def merge_txt_files():
    # 获取当前脚本所在目录
    script_dir = os.path.dirname(os.path.abspath(__file__))
    dir_path = os.path.join(script_dir, "地区源")

    # 检查目录是否存在
    if not os.path.exists(dir_path):
        print(f"目录 '地区源' 不存在.")
        return

    # 获取目录下所有的txt文件
    txt_files = [file for file in os.listdir(dir_path) if file.endswith(".txt")]

    # 检查是否有txt文件
    if not txt_files:
        print(f"目录 '地区源' 中没有找到txt文件.")
        return

    # 合并文件内容
    merged_content = ""
    for txt_file in txt_files:
        file_path = os.path.join(dir_path, txt_file)
        with open(file_path, "r", encoding="utf-8") as file:
            merged_content += file.read() + "\n"

    # 将合并后的内容写入新文件
    merged_file_path = os.path.join(script_dir, "合并源.txt")
    with open(merged_file_path, "w", encoding="utf-8") as merged_file:
        merged_file.write(merged_content)

    print(f"合并完成,合并文件保存在: {merged_file_path}")

# 调用函数
merge_txt_files()