Python项目源码34:网页内容提取工具1.0(Tkinter+requests+html2text)

------★Python练手项目源码★-------

Python项目32:订单销售额管理系统1.0(Tkinter+CSV)

Python项目31:初学者也能看懂的聊天机器人1.0源码(命令行界面+Re正则表达式)

Python项目源码30:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)

Python项目29:学生缴费管理系统(Tkinter+CSV)

Python项目28:设计日志管理系统2.0(Tkinter+Json)

Python项目27:用Tkinter写日志管理系统(中下等难度)

Python项目26:设计学生成绩管理系统(简易版)

Python项目25:带滚动效果的商场抽奖系统(安排!!!)

Python项目24:基于Tkinter图形化界面,实现的学生课堂点名系统

Python项目23:(简易版)年会员工抽奖程序

Python项目22:一个简单的记账系统(收入+支出+查询)

Python项目21:双色球历史数据爬虫+数据分析小工具

Python项目源码20:银行管理系统(开户、查询、取款、存款、转账、锁定、解锁、退出)

Python项目19:学员信息管理系统(简易版)

Python项目18:使用Pillow模块,随机生成4位数的图片验证码

Python项目17:教你制作一副帅气的春联

Python项目16:教你使用pillow把女神的图片,添加表白文字。

Python项目15:Pygame制作,新年动态烟花

Python项目14:使用random,模拟扑克牌发牌+猜单词游戏

Python项目12:破解zip压缩包的密码

Python项目09:使用filestools模块,批量添加图片水印

Python小项目05:使用pywifi模块,暴力破解WIFI密码 !!亲测有效

Python经典小游戏02:字母数字代码雨

主要功能特点:

1.界面组件:URL输入框和功能按钮,带滚动条的文本显示区域,底部状态栏显示操作状态。

2.核心功能:自动识别网页编码,使用BeautifulSoup解析HTML,通过html2text提取可读正文内容,多线程处理防止界面卡顿。

3.异常处理:网络请求超时处理,SSL证书验证异常处理,友好的错误提示。

4.使用说明:输入需要提取内容的网页URL,点击"提取内容"按钮开始抓取

,结果将显示标题和格式化后的正文内容,支持清除结果和重新提取。

使用前需要安装依赖库:

pip install requests bs4 html2text

注意:实际使用时可能需要根据目标网站的具体结构调整内容提取逻辑,对于动态加载的网页内容需要使用Selenium等工具配合。

测试网址:https://stock.eastmoney.com/

python 复制代码
# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox
import requests
from bs4 import BeautifulSoup
import html2text
import threading

class WebExtractorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("网页内容提取工具 v1.0")
        self.root.geometry("800x600")

        # 创建界面组件
        self.create_widgets()

        # 配置请求头
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        }

    def create_widgets(self):
        # URL输入区域
        url_frame = ttk.Frame(self.root)
        url_frame.pack(pady=10, fill=tk.X)

        ttk.Label(url_frame, text="目标URL:").pack(side=tk.LEFT, padx=5)
        self.url_entry = ttk.Entry(url_frame, width=60)
        self.url_entry.pack(side=tk.LEFT, expand=True, fill=tk.X, padx=5)

        # 功能按钮
        btn_frame = ttk.Frame(self.root)
        btn_frame.pack(pady=5)

        ttk.Button(btn_frame, text="提取内容", command=self.start_extract_thread).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="清除结果", command=self.clear_results).pack(side=tk.LEFT, padx=5)

        # 结果显示区域
        result_frame = ttk.Frame(self.root)
        result_frame.pack(pady=10, fill=tk.BOTH, expand=True)

        self.result_area = scrolledtext.ScrolledText(
            result_frame,
            wrap=tk.WORD,
            font=('微软雅黑', 10),
            undo=True
        )
        self.result_area.pack(fill=tk.BOTH, expand=True)

        # 状态栏
        self.status_var = tk.StringVar()
        status_bar = ttk.Label(self.root, textvariable=self.status_var, relief=tk.SUNKEN)
        status_bar.pack(side=tk.BOTTOM, fill=tk.X)

    def start_extract_thread(self):
        """启动提取线程"""
        url = self.url_entry.get().strip()
        if not url:
            messagebox.showwarning("警告", "请输入有效的URL地址")
            return

        self.status_var.set("正在提取内容,请稍候...")
        threading.Thread(target=self.extract_content, daemon=True).start()

    def extract_content(self):
        """执行内容提取"""
        url = self.url_entry.get().strip()
        try:
            # 发送HTTP请求
            response = requests.get(
                url,
                headers=self.headers,
                timeout=30,
                verify=False  # 忽略SSL证书验证
            )
            response.encoding = response.apparent_encoding  # 自动检测编码

            # 解析网页内容
            soup = BeautifulSoup(response.text, 'html.parser')

            # 提取标题
            title = soup.title.string if soup.title else '未找到标题'

            # 提取正文(使用html2text转换)
            converter = html2text.HTML2Text()
            converter.ignore_links = False
            main_content = converter.handle(str(soup.find('body')))

            # 更新界面
            self.root.after(0, self.show_results, title, main_content)
            self.status_var.set("内容提取完成")

        except Exception as e:
            self.root.after(0, messagebox.showerror, "错误", f"提取失败: {str(e)}")
            self.status_var.set("提取失败")

    def show_results(self, title, content):
        """显示提取结果"""
        self.result_area.delete(1.0, tk.END)
        self.result_area.insert(tk.END, "【网页标题】\n")
        self.result_area.insert(tk.END, f"{title}\n\n")
        self.result_area.insert(tk.END, "【正文内容】\n")
        self.result_area.insert(tk.END, content)

    def clear_results(self):
        """清除结果"""
        self.result_area.delete(1.0, tk.END)
        self.url_entry.delete(0, tk.END)
        self.status_var.set("就绪")

if __name__ == "__main__":
    root = tk.Tk()
    app = WebExtractorApp(root)
    root.mainloop()

完毕!!感谢您的收看

----------★★跳转到历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame

相关推荐
智能体与具身智能6 小时前
TVA具身智能的概念、架构与应用(19)
人工智能·python·具身智能
2601_962294616 小时前
python中range函数怎么用
python·for循环·可迭代对象·range函数·整数列表
青 春 记 忆7 小时前
零基础入门python70:Docker Compose 编排完整后端
python·后端开发
新时代牛马7 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python
白山编程大哥8 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
落羽的落羽9 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
Chasing__Dreams9 小时前
大模型应用开发--13--RAG 查询优化策略
python
“AI国潮设计-小江”9 小时前
《Python实战 | SDXL大模型批量生成“英歌舞海浪”蛋糕IP,附核心Prompt控制代码与IP授权变现思路》
人工智能·python·prompt·aigc
znnnk10 小时前
【Python】GUI 开发从入门到实战(三):PyQt/PySide 进阶之路
开发语言·python·pyqt
触底反弹12 小时前
面试被问到 Text2SQL,我用 DeepSeek 自己实现了一个
python·sqlite