【Python爬虫专栏】第2课——CSDN专栏所有文章转表格

【Python爬虫专栏】第2课——CSDN专栏所有文章转表格_第1张图片

文章目录

  • 专栏导读
  • 一、背景
  • 二、功能概述
  • 结果预览
  • 三、代码解析
    • 1. 导入必要的库
    • 2. 核心爬取函数
    • 3. 复制功能
    • 4. GUI界面
  • 完整代码
  • 总结

专栏导读

  • 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

  • ️‍ 博客主页:请点击——> 一晌小贪欢的博客主页求关注

  • 该系列文章专栏:请点击——>Python办公自动化专栏求订阅

  • 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅

  • 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅

  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正

  • ❤️ 欢迎各位佬关注! ❤️

一、背景

  • 在上一课中,我们学习了基本的网页爬取技术。今天,我将带大家实现一个实用的爬虫工具——CSDN专栏文章提取器,它能将专栏中的所有文章标题和链接提取出来,并以Markdown表格的形式展示,方便我们整理和分享专栏内容。

【Python爬虫专栏】第2课——CSDN专栏所有文章转表格_第2张图片

【Python爬虫专栏】第2课——CSDN专栏所有文章转表格_第3张图片

二、功能概述

这个工具主要有以下功能:

  • 输入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界面

# 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()

完整代码

# -*- coding: UTF-8 -*-
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:
        # 将Cookie字符串转换为字典形式
        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("提示", "没有内容可以复制")

# 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()

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 关注

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 收藏

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

你可能感兴趣的:(Python爬虫专栏,python,爬虫,c++,python爬虫,爬虫工具,网络爬虫)