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

相关推荐
万粉变现经纪人3 小时前
如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘tokenizers’ 问题
python·selenium·测试工具·scrapy·beautifulsoup·fastapi·pip
编程武士4 小时前
从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践
人工智能·python·yolo·性能优化
我的xiaodoujiao5 小时前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
傻啦嘿哟7 小时前
Python SQLite模块:轻量级数据库的实战指南
数据库·python·sqlite
Q_Q5110082857 小时前
python+django/flask+uniapp基于微信小程序的瑜伽体验课预约系统
spring boot·python·django·flask·uni-app·node.js·php
XueminXu7 小时前
Python读取MongoDB的JSON字典和列表对象转为字符串
python·mongodb·json·pymongo·mongoclient·isinstance·json.dumps
techdashen7 小时前
12分钟讲解Python核心理念
开发语言·python
jie*7 小时前
小杰机器学习(nine)——支持向量机
人工智能·python·机器学习·支持向量机·回归·聚类·sklearn
闭着眼睛学算法8 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
郝学胜-神的一滴8 小时前
谨慎地迭代函数所收到的参数 (Effective Python 第31条)
开发语言·python·程序人生·软件工程