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

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

chanra1n1年前 (2023-09-02)Python4868

这个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,并清理去重,历史输出过的将不再输出” 的相关文章

2.Python中的基本运算

2.Python中的基本运算

我们打开Python,请你尝试输入如下算式并尝试理解有什么为什么是这样的?1+1 1+1.0 1-2 2-3.5 1*1 1*1.1 1/2 2/1 2/3 3/2 3//2 3/1.0 5/2.5我们不难得到如下结果2 2.0 -1 -1.5 1 1.1 0.5...

random库

random库

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

顺序查找

顺序查找

如果需要查找某个特定值的位置(以便能够替换或删除它),可以直接使用index方法。searchedValue=100 #values是之前定义好的一个列表 if searchedValue in walues:     pos=values.index(searchedValue)     ...

列表作为函数参数

列表作为函数参数

列表作为函数参数,函数中可以修改原列表def multiply(values,factor):     for i in range(len(values)):        values[i]*=factor          aList=[1,2,3,4,5]  multiply(aL...

anaconda打不开的解决方法

anaconda打不开的解决方法

报错内容Navigator Error An unexpected error occurred on Navigator start-up Report Please report this ...

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

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

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