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

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

chanra1n1年前 (2023-09-02)Python4523

这个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://world.myfpga.cn/index.php/post/324.html

分享给朋友:

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

列表实例

列表实例

随机生成100个小写字母存入一个列表中,统计26个字母的出现次数。import random def getRandomLetter():     code_a=ord('a')     code_z=ord('z')     x=random.randint(code_a,code_z)...

anaconda打不开的解决方法

anaconda打不开的解决方法

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

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

(原创)使用Python递归获取网页内的所有URL,并进行清洗

(原创)使用Python递归获取网页内的所有URL,并进行清洗

import argparse import time from urllib.parse import urljoin, urlparse from selenium import webdriver...

(原创)使用Python自动对子文件夹中的图片文件进行重命名

(原创)使用Python自动对子文件夹中的图片文件进行重命名

为了解决Python深度学习的时候,经常遇到的文件名问题import os # 获取指定目录下的所有子文件夹 def get_subfolders(path):     subfolders = []...