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

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

chanra1n8个月前 (09-02)Python3496

这个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发布,如需转载请注明出处。

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

分享给朋友:

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

0.Python环境的搭建

0.Python环境的搭建

   请打开网页  https://www.python.org/downloads/windows/    Windows环境下的Python        这里我选择...

1.Python基本的使用

1.Python基本的使用

我们打开python或者通过运行python也可以,请复制如下代码,然后按下Enter键,看看会发生什么?print('\n'.join([''.join([('MyFpga'[(x-y) % len('MyFpga'...

Python关于turtle的函数名

Python关于turtle的函数名

turtle.forward(distance)                   向当前画笔方向移动distance像素长度turtle.backward(distance)              向当前画笔相反方向移动distance像素长度turtle.right(degree)    ...

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=...

random库

random库

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