当前位置:首页 > Software > Python > 正文内容

(原创)使用Python从txt中读取urls,并清理去重,历史输出过的将不再输出

chanra1n1年前 (2023-09-02)Python4717

这个Python程序的主要功能是从一个文本文件中读取URLs,并提取出其中的域名。程序还具备记录已输出的URLs,以便下次运行时不会再次输出已经处理过的URLs的功能。以下是程序的主要组成部分和功能:

    extract_domain(url) 函数:这个函数使用正则表达式从给定的URL中提取域名。它检查URL是否以http://或https://开头,然后提取域名部分,并将其转换为小写字母。

    process_urls_file(file_path, output_set) 函数:这个函数用于处理包含URLs的文本文件。它接受文件路径 file_path 和一个用于记录已输出URLs的集合 output_set。该函数读取文件中的每一行,使用正则表达式查找URLs,提取域名,并检查是否满足以下条件:

    域名不在 unique_domains 集合中(确保不重复)。

    URL不在 output_set 中(确保不重复输出)。 如果URL满足这些条件,就会将其添加到 extracted_urls 列表中,并记录域名和URL以确保不重复。

    主程序部分:在主程序部分,程序首先读取之前已经输出过的URLs,这些URLs被记录在 history_urls.txt 文件中。如果文件不存在,程序会处理这个异常并继续执行。然后,程序调用 process_urls_file 函数来处理 urls.txt 文件中的URLs,并将满足条件的URLs打印为逗号分隔的字符串。最后,程序会将新输出的URLs记录到 history_urls.txt 文件中,以便下次运行时不再输出已处理过的URLs。

这个程序的主要用途是从文本文件中提取URLs,并确保不输出已经处理过的URLs,以及记录输出历史。

import re

# 从URL中提取域名
def extract_domain(url):
    pattern = r"https?://(www\.)?([^/]+)"
    match = re.match(pattern, url)
   
    if match:
        domain = match.group(2)
        return domain.lower()
    else:
        return None

# 从文件中读取URLs并去除重复的域名和空行
def process_urls_file(file_path, output_set):
    unique_domains = set()  # 用于存储唯一的域名
    extracted_urls = []     # 用于存储提取的URLs

    with open(file_path, "r", encoding="utf-8") as file:
        for line in file:
            urls = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', line)
            for url in urls:
                domain = extract_domain(url)
                if domain and domain not in unique_domains and url not in output_set:
                    unique_domains.add(domain)
                    extracted_urls.append(url)

    return extracted_urls

if __name__ == "__main__":
    file_path = "urls.txt"
    output_set = set()  # 用于记录已经输出的URLs

    # 读取已经输出的URLs
    try:
        with open("history_urls.txt", "r", encoding="utf-8") as output_file:
            for line in output_file:
                url = line.strip()
                if url:
                    output_set.add(url)
    except FileNotFoundError:
        pass

    extracted_urls = process_urls_file(file_path, output_set)

    # 将URLs用逗号分隔并打印
    url_str = ",".join(extracted_urls)
    print(url_str)

    # 记录已经输出的URLs
    with open("history_urls.txt", "a", encoding="utf-8") as output_file:
        for url in extracted_urls:
            output_file.write(url + "\n")

下面这个版本的在运行完后会写入剪切板,方便粘贴

import re
import pyperclip

# 从URL中提取域名
def extract_domain(url):
    pattern = r"https?://(www\.)?([^/]+)"
    match = re.match(pattern, url)
   
    if match:
        domain = match.group(2)
        return domain.lower()
    else:
        return None

# 从文件中读取URLs并去除重复的域名和空行
def process_urls_file(file_path, output_set):
    unique_domains = set()  # 用于存储唯一的域名
    extracted_urls = []     # 用于存储提取的URLs

    with open(file_path, "r", encoding="utf-8") as file:
        for line in file:
            urls = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', line)
            for url in urls:
                domain = extract_domain(url)
                if domain and domain not in unique_domains and url not in output_set:
                    unique_domains.add(domain)
                    extracted_urls.append(url)

    return extracted_urls

if __name__ == "__main__":
    file_path = "urls.txt"
    output_set = set()  # 用于记录已经输出的URLs

    # 读取已经输出的URLs
    try:
        with open("history_urls.txt", "r", encoding="utf-8") as output_file:
            for line in output_file:
                url = line.strip()
                if url:
                    output_set.add(url)
    except FileNotFoundError:
        pass

    extracted_urls = process_urls_file(file_path, output_set)

    # 将URLs用逗号分隔并打印
    url_str = ",".join(extracted_urls)
    print(url_str)
    pyperclip.copy(url_str)

    # 记录已经输出的URLs
    with open("history_urls.txt", "a", encoding="utf-8") as output_file:
        for url in extracted_urls:
            output_file.write(url + "\n")


扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:https://myfpga.cn/index.php/post/324.html

分享给朋友:

“(原创)使用Python从txt中读取urls,并清理去重,历史输出过的将不再输出” 的相关文章

math库的使用

math库的使用

math库包括4个数学常数math.pi      圆周率math.e       自然对数math.inf     正无穷大,负无穷大为-math.infmath.nan     非浮点数标记math库常用函数math.cell(x)      向上取整,返回不小于x的最小整数math.facto...

  索引运算符【】

索引运算符【】

选择字符串的子序列语法【start:finish】        start:子序列开始位置的索引值        finish:子序列结束位置的下一个字符的索引值如果不提供start或者finish,默认start为第一个字符,finish为最后一个字符。例如>>>my_str=...

搜索字符串

搜索字符串

常用搜索字符串中子串的方法str.count(substring)      返回str中substring子串出现的无覆盖的次数str.find(s1)                    返回s1在这个字符串的最低下标,如果字符串中不存在s1,则返回-1str.rfind(s1)       ...

random库

random库

random()            生成一个[0.0,1.0)之间的随机小数randint(a,b)     生成一个[a,b]之间的整数uniform(a,b)     生成一个[a,b]之间的随机小数对random库的引用方法与math库一样,采用下面两种方式实现:import random...

体温打卡python 可通过账户密码获取对应ID号

体温打卡python 可通过账户密码获取对应ID号

仅用于学习和测试,请勿自动填报或者干任何违法的事情import datetime import hashlib import random from urllib.parse import quote import req...

Python自动清理错误图片,深度学习训练数据集准备

Python自动清理错误图片,深度学习训练数据集准备

使用python运行from PIL import Image from pathlib import Path import os   path = r'.'  ...