
文章目录
- 专栏导读
- 一、背景
- 二、功能概述
- 结果预览
- 三、代码解析
-
- 1. 导入必要的库
- 2. 核心爬取函数
- 3. 复制功能
- 4. GUI界面
- 完整代码
- 总结
专栏导读
-
欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
-
️ 博客主页:请点击——> 一晌小贪欢的博客主页求关注
-
该系列文章专栏:请点击——>Python办公自动化专栏求订阅
-
此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅
-
此外还有python基础专栏:请点击——>Python基础学习专栏求订阅
-
文章作者技术和水平有限,如果文中出现错误,希望大家能指正
-
❤️ 欢迎各位佬关注! ❤️
一、背景
-
在上一课中,我们学习了基本的网页爬取技术。今天,我将带大家实现一个实用的爬虫工具——CSDN专栏文章提取器,它能将专栏中的所有文章标题和链接提取出来,并以Markdown表格的形式展示,方便我们整理和分享专栏内容。


二、功能概述
这个工具主要有以下功能:
-
输入CSDN专栏链接和用户Cookie
-
自动抓取专栏中所有文章
-
将文章标题和链接格式化为Markdown表格
-
提供一键复制功能,方便粘贴到Markdown文档中
结果预览
文章名称 |
链接 |
【趣味Python】第10课:漫天繁星疯狂闪闪闪(点击版) |
点我进行跳转 |
【趣味Python】第9课:Tkinter恶搞无限弹窗 |
点我进行跳转 |
【趣味Python】第8课:小汽车游戏 |
点我进行跳转 |
【趣味Python】第7课:炫酷计算器资源占用率可视化 |
点我进行跳转 |
【趣味Python】第6课:小风车吱悠悠地转 |
点我进行跳转 |
【趣味Python】第5课:雪花飘飘效果 |
点我进行跳转 |
【趣味Python】第4课:炫酷烟花秀 |
点我进行跳转 |
【趣味Python】第3课:夜空划过流星雨 |
点我进行跳转 |
【趣味Python】第2课:漫天繁星疯狂闪闪闪 |
点我进行跳转 |
【趣味Python】第1课:使用tkinter实现疯狂弹幕效果 |
点我进行跳转 |
三、代码解析
1. 导入必要的库
-
tkinter:用于构建GUI界面
-
trequests:发送HTTP请求获取网页内容
-
tlxml:解析HTML文档,提取所需数据
import tkinter as tk
from tkinter import messagebox
import requests
from lxml import etree
2. 核心爬取函数
关键点解析:
-
使用XPath定位文章标题和链接
-
将Cookie字符串转换为字典格式
-
构建Markdown表格格式的输出
def fetch_articles():
pass
见完整代码
3. 复制功能
def copy_to_clipboard():
result = text_box.get('1.0', tk.END)
if result.strip():
root.clipboard_clear()
root.clipboard_append(result)
messagebox.showinfo("复制成功", "结果已复制到剪贴板!")
else:
messagebox.showwarning("提示", "没有内容可以复制")
4. GUI界面
root = tk.Tk()
root.title("CSDN专栏文章提取器")
root.geometry("820x550")
tk.Label(root, text="请输入专栏链接:").pack(pady=5)
entry_url = tk.Entry(root, width=100)
entry_url.pack(pady=5)
tk.Label(root, text="请输入Cookie:").pack(pady=5)
entry_cookie = tk.Entry(root, width=100)
entry_cookie.pack(pady=5)
tk.Button(root, text="抓取", command=fetch_articles).pack(pady=5)
text_box = tk.Text(root, wrap=tk.WORD, width=100, height=20)
text_box.pack(pady=5)
tk.Button(root, text="复制结果", command=copy_to_clipboard).pack(pady=5)
root.mainloop()
完整代码
import tkinter as tk
from tkinter import messagebox
import requests
from lxml import etree
def fetch_articles():
text_box.delete('1.0', tk.END)
url = entry_url.get().strip()
cookie_str = entry_cookie.get().strip()
if not url:
messagebox.showwarning("提示", "请输入专栏链接")
return
if not cookie_str:
messagebox.showwarning("提示", "请输入Cookie")
return
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}
try:
cookies = dict(item.strip().split("=", 1) for item in cookie_str.split(";") if "=" in item)
res = requests.get(url, headers=headers, cookies=cookies)
res.encoding = 'utf-8'
tree = etree.HTML(res.text)
urls = tree.xpath('//ul[@class="column_article_list"]//li//a')
titles = tree.xpath('//ul[@class="column_article_list"]//li//div[@class="column_article_title"]//h2')
if not urls or not titles:
text_box.insert(tk.END, "未找到任何文章,请检查链接或Cookie是否正确。")
return
output = "| 文章名称 | 链接 |\n|:--|--|\n"
for i in range(min(len(urls), len(titles))):
href = urls[i].xpath('./@href')[0].strip()
title_text = titles[i].text.strip() if titles[i].text else "无标题"
output += f"|{title_text}|点我进行跳转|\n"
text_box.insert(tk.END, output)
except Exception as e:
messagebox.showerror("错误", f"发生异常:{e}")
def copy_to_clipboard():
result = text_box.get('1.0', tk.END)
if result.strip():
root.clipboard_clear()
root.clipboard_append(result)
messagebox.showinfo("复制成功", "结果已复制到剪贴板!")
else:
messagebox.showwarning("提示", "没有内容可以复制")
root = tk.Tk()
root.title("CSDN专栏文章提取器")
root.geometry("820x550")
tk.Label(root, text="请输入专栏链接:").pack(pady=5)
entry_url = tk.Entry(root, width=100)
entry_url.pack(pady=5)
tk.Label(root, text="请输入Cookie:").pack(pady=5)
entry_cookie = tk.Entry(root, width=100)
entry_cookie.pack(pady=5)
tk.Button(root, text="抓取", command=fetch_articles).pack(pady=5)
text_box = tk.Text(root, wrap=tk.WORD, width=100, height=20)
text_box.pack(pady=5)
tk.Button(root, text="复制结果", command=copy_to_clipboard).pack(pady=5)
root.mainloop()
总结
-
希望对初学者有帮助
-
致力于办公自动化的小小程序员一枚
-
希望能得到大家的【一个免费关注】!感谢
-
求个 关注
-
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
-
求个 ❤️ 喜欢 ❤️
-
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
-
求个 收藏
-
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏