python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python提取页面链接

Python实现一键提取页面所有链接

作者:Kyln.Wu

这篇文章主要为大家详细介绍了如何使用Python实现一键提取页面所有链接,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

链接提取, 正则神器, 批量文本, 小白脚本

故事开场

周一上午,老板甩给你一个 200 页的会议记录 TXT:“把里面所有网址整理成 Excel,午饭前给我!”

你打开文档一看,密密麻麻全是文字,网址藏在各个角落,复制粘贴能点到手抽筋。

这时,你从抽屉掏出“小白瑞士军刀”——links_extractor.py

把它拖到 TXT 文件上,双击,三秒后自动生成 xxx_links.txt,所有网址排队站好。

你直接复制进 Excel,泡杯咖啡的功夫就交差。痛点解决:再也不用肉眼找链接,省时 99%。

代码解析

功能块 1:把文件读进来

像翻书一样,先把整本 TXT 读进内存,后面才好找东西。

def read_text_file(file_path):
    with open(file_path, encoding='utf-8') as f:
        return f.read()

encoding='utf-8' 防止中文乱码,小白也能放心用。

功能块 2:用“网址捕手”抓链接

正则表达式就像一张渔网,http 开头或 www 开头都能一网打尽。

import re
def extract_urls(text):
    pattern = r"(?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-?=%.]+"
    return re.findall(pattern, text)

re.findall 一次性把所有匹配结果装进列表,方便后面输出。

功能块 3:把结果写成新文件

抓到的链接按行写进 原文件名_links.txt,清爽不覆盖原文件。

def export_urls(urls, file_path):
    with open(file_path.replace(".txt", "_links.txt"), "w", encoding='utf-8') as f:
        f.write("\n".join(urls))

一行一个链接,Excel 直接粘贴即可。

功能块 4:一键启动入口

把上面三块拼起来,双击脚本就能跑。

if __name__ == "__main__":
    import sys
    get_urls(sys.argv[1])

运行方式:

python links_extractor.py 会议记录.txt

如果还想更厉害

扩展点子 1:批量扫描整个文件夹

一次性抓完目录里所有 TXT,结果合并到一张表。

import glob, os
all_urls = []
for txt_file in glob.glob("*.txt"):
    all_urls.extend(extract_urls(read_text_file(txt_file)))
with open("all_links.txt", "w", encoding='utf-8') as f:
    f.write("\n".join(set(all_urls)))  # set 去重

双击后,整个文件夹的网址全进 all_links.txt

扩展点子 2:加个迷你窗口,拖文件就能跑

tkinter 做 GUI,小白再也不用敲命令。

import tkinter as tk
from tkinter.filedialog import askopenfilename

root = tk.Tk()
root.withdraw()  # 隐藏主窗口
file = askopenfilename(filetypes=[("Text files", "*.txt")])
if file:
    get_urls(file)
    tk.messagebox.showinfo("完成", f"已生成 {file}_links.txt")

双击脚本→弹窗选文件→秒出结果,全程鼠标操作。

方法补充

使用Python一次性批量下载网页内所有链接

完整代码

import os
import requests
from bs4 import BeautifulSoup
 
# 目标网页的URL
url = "https://"  # 请将此处替换为实际的网页URL
# 指定下载文件的文件夹路径
# 使用原始字符串
download_folder = r"D:\"
# 或者使用双反斜杠
# download_folder = "D:\\AScholarFolder\\"
# 创建下载文件夹(如果不存在)
if not os.path.exists(download_folder):
    os.makedirs(download_folder)
# 获取网页内容
response = requests.get(url)
if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'html.parser')
    # 找到所有的 <a> 标签
    for a_tag in soup.find_all('a'):
        href = a_tag.get('href')
        if href:
            # 下载文件
            file_name = href.split('/')[-1]
            file_path = os.path.join(download_folder, file_name)
            try:
                file_response = requests.get(href)
                if file_response.status_code == 200:
                    with open(file_path, 'wb') as file:
                        file.write(file_response.content)
                    print(f"已下载: {file_name}")
                else:
                    print(f"下载失败: {href}")
            except:
                print(f"下载失败: {href}")
else:
    print(f"无法获取网页内容: {url}")

总结

links_extractor.py 这把 30 行瑞士军刀,用三招“读文本、抓链接、写文件”帮你把散落各处的网址瞬间归队。

再加批量扫描或迷你窗口,它就从命令行小工具升级为效率神器。

下次老板再甩 TXT,你只需双击脚本,喝杯水的功夫就交卷!

到此这篇关于Python实现一键提取页面所有链接的文章就介绍到这了,更多相关Python提取页面链接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文