Python實(shí)現(xiàn)一鍵提取頁面所有鏈接
鏈接提取, 正則神器, 批量文本, 小白腳本
故事開場
周一上午,老板甩給你一個(gè) 200 頁的會議記錄 TXT:“把里面所有網(wǎng)址整理成 Excel,午飯前給我!”
你打開文檔一看,密密麻麻全是文字,網(wǎng)址藏在各個(gè)角落,復(fù)制粘貼能點(diǎn)到手抽筋。
這時(shí),你從抽屜掏出“小白瑞士軍刀”——links_extractor.py。
把它拖到 TXT 文件上,雙擊,三秒后自動生成 xxx_links.txt,所有網(wǎng)址排隊(duì)站好。
你直接復(fù)制進(jìn) Excel,泡杯咖啡的功夫就交差。痛點(diǎn)解決:再也不用肉眼找鏈接,省時(shí) 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))
一行一個(gè)鏈接,Excel 直接粘貼即可。
功能塊 4:一鍵啟動入口
把上面三塊拼起來,雙擊腳本就能跑。
if __name__ == "__main__":
import sys
get_urls(sys.argv[1])
運(yùn)行方式:
python links_extractor.py 會議記錄.txt
如果還想更厲害
擴(kuò)展點(diǎn)子 1:批量掃描整個(gè)文件夾
一次性抓完目錄里所有 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 去重
雙擊后,整個(gè)文件夾的網(wǎng)址全進(jìn) all_links.txt。
擴(kuò)展點(diǎn)子 2:加個(gè)迷你窗口,拖文件就能跑
用 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)文章
Python小工具之消耗系統(tǒng)指定大小內(nèi)存的方法
今天小編就為大家分享一篇Python小工具之消耗系統(tǒng)指定大小內(nèi)存的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python使用pyppeteer進(jìn)行網(wǎng)頁截圖并發(fā)送機(jī)器人實(shí)例
這篇文章主要介紹了Python使用pyppeteer進(jìn)行網(wǎng)頁截圖并發(fā)送機(jī)器人實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
Python?Pandas多種添加行列數(shù)據(jù)方法總結(jié)
在進(jìn)行數(shù)據(jù)分析時(shí)經(jīng)常需要按照一定條件創(chuàng)建新的數(shù)據(jù)列,然后進(jìn)行進(jìn)一步分析,下面這篇文章主要給大家介紹了關(guān)于Python?Pandas多種添加行列數(shù)據(jù)方法的相關(guān)資料,需要的朋友可以參考下2022-07-07
python數(shù)據(jù)結(jié)構(gòu)之圖的實(shí)現(xiàn)方法
這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)之圖的實(shí)現(xiàn)方法,實(shí)例分析了Python圖的表示方法與常用尋路算法的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-07-07
Python基礎(chǔ)學(xué)習(xí)之認(rèn)識線程
這篇文章主要介紹了Python線程,這篇開始我們將進(jìn)入中級編程。處理更加復(fù)雜事情。比如本文的線程,咱們先從基礎(chǔ)知識入手,需要的朋友可以參考下下面文章的詳細(xì)內(nèi)容2022-02-02

