Python實(shí)現(xiàn)一鍵提取頁面所有鏈接
鏈接提取, 正則神器, 批量文本, 小白腳本
故事開場
周一上午,老板甩給你一個 200 頁的會議記錄 TXT:“把里面所有網(wǎng)址整理成 Excel,午飯前給我!”
你打開文檔一看,密密麻麻全是文字,網(wǎng)址藏在各個角落,復(fù)制粘貼能點(diǎn)到手抽筋。
這時,你從抽屜掏出“小白瑞士軍刀”——links_extractor.py。
把它拖到 TXT 文件上,雙擊,三秒后自動生成 xxx_links.txt,所有網(wǎng)址排隊(duì)站好。
你直接復(fù)制進(jìn) Excel,泡杯咖啡的功夫就交差。痛點(diǎn)解決:再也不用肉眼找鏈接,省時 99%。
代碼解析
功能塊 1:把文件讀進(jìn)來
像翻書一樣,先把整本 TXT 讀進(jìn)內(nèi)存,后面才好找東西。
def read_text_file(file_path):
with open(file_path, encoding='utf-8') as f:
return f.read()
加 encoding='utf-8' 防止中文亂碼,小白也能放心用。
功能塊 2:用“網(wǎng)址捕手”抓鏈接
正則表達(dá)式就像一張漁網(wǎng),http 開頭或 www 開頭都能一網(wǎng)打盡。
import re
def extract_urls(text):
pattern = r"(?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-?=%.]+"
return re.findall(pattern, text)
re.findall 一次性把所有匹配結(jié)果裝進(jìn)列表,方便后面輸出。
功能塊 3:把結(jié)果寫成新文件
抓到的鏈接按行寫進(jìn) 原文件名_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])
運(yùn)行方式:
python links_extractor.py 會議記錄.txt
如果還想更厲害
擴(kuò)展點(diǎn)子 1:批量掃描整個文件夾
一次性抓完目錄里所有 TXT,結(jié)果合并到一張表。
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 去重
雙擊后,整個文件夾的網(wǎng)址全進(jìn) all_links.txt。
擴(kuò)展點(diǎn)子 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")
雙擊腳本→彈窗選文件→秒出結(jié)果,全程鼠標(biāo)操作。
方法補(bǔ)充
使用Python一次性批量下載網(wǎng)頁內(nèi)所有鏈接
完整代碼
import os
import requests
from bs4 import BeautifulSoup
# 目標(biāo)網(wǎng)頁的URL
url = "https://" # 請將此處替換為實(shí)際的網(wǎng)頁URL
# 指定下載文件的文件夾路徑
# 使用原始字符串
download_folder = r"D:\"
# 或者使用雙反斜杠
# download_folder = "D:\\AScholarFolder\\"
# 創(chuàng)建下載文件夾(如果不存在)
if not os.path.exists(download_folder):
os.makedirs(download_folder)
# 獲取網(wǎng)頁內(nèi)容
response = requests.get(url)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
# 找到所有的 <a> 標(biāo)簽
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"無法獲取網(wǎng)頁內(nèi)容: {url}")總結(jié)
links_extractor.py 這把 30 行瑞士軍刀,用三招“讀文本、抓鏈接、寫文件”幫你把散落各處的網(wǎng)址瞬間歸隊(duì)。
再加批量掃描或迷你窗口,它就從命令行小工具升級為效率神器。
下次老板再甩 TXT,你只需雙擊腳本,喝杯水的功夫就交卷!
到此這篇關(guān)于Python實(shí)現(xiàn)一鍵提取頁面所有鏈接的文章就介紹到這了,更多相關(guān)Python提取頁面鏈接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用matplotlib動態(tài)刷新指定曲線實(shí)例
這篇文章主要介紹了使用matplotlib動態(tài)刷新指定曲線實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
實(shí)現(xiàn)python版本的按任意鍵繼續(xù)/退出
本文給大家簡單介紹了在windows以及l(fā)inux下實(shí)現(xiàn)python版本的按任意鍵繼續(xù)/退出功能,非常的簡單實(shí)用,linux下稍微復(fù)雜些,有需要的小伙伴可以參考下2016-09-09
Python拋出引發(fā)異常(raise)知識點(diǎn)總結(jié)
在本篇文章里小編給大家整理了關(guān)于Python拋出引發(fā)異常(raise)知識點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2021-06-06
Python讀取DataFrame的某行或某列的方法實(shí)現(xiàn)
Dataframe是Python中一種重要的數(shù)據(jù)處理工具,它能夠以表格形式存儲并處理數(shù)據(jù),本文主要介紹了Python讀取DataFrame的某行或某列的方法實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-04-04
Python實(shí)現(xiàn)快速排序算法及去重的快速排序的簡單示例
quick sort快速排序是一種再基礎(chǔ)不過的排序算法,使用Python代碼寫起來相當(dāng)簡潔,這里我們就來看一下Python實(shí)現(xiàn)快速排序算法及去重的快速排序的簡單示例:2016-06-06
Python-split()函數(shù)實(shí)例用法講解
在本篇文章里小編給大家整理的是一篇關(guān)于Python-split()函數(shù)實(shí)例用法講解,有興趣的朋友們可以學(xué)習(xí)下。2020-12-12

