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

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

chanra1n8个月前 (09-02)Python3468

这个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...

Python关于turtle的函数名

Python关于turtle的函数名

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

for循环

for循环

range()函数range(start,end,step)range()函数返回一个可迭代对象(可理解为一个序列,序列中的数包括start,不包括end)例如range(1,101),返回1-100的序列。range(101),范围0-100的序列。range(1,100,2),返回1,3,5.....

random库

random库

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

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

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

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

(原创)使用Python对任意网站图片进行爬取,仅用于学习

(原创)使用Python对任意网站图片进行爬取,仅用于学习

import os import time import argparse import requests import re import io from urllib.parse import ...