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

相关推荐
知识中的海王2 小时前
js逆向入门图灵爬虫练习平台第六题
python
碳基学AI3 小时前
北京大学DeepSeek内部研讨系列:AI在新媒体运营中的应用与挑战|122页PPT下载方法
大数据·人工智能·python·算法·ai·新媒体运营·产品运营
forestsea3 小时前
Python进阶编程总结
开发语言·python·notepad++
袖清暮雨4 小时前
Python刷题笔记
笔记·python·算法
乌旭4 小时前
AI芯片混战:GPU vs TPU vs NPU的算力与能效博弈
人工智能·pytorch·python·深度学习·机器学习·ai·ai编程
MinggeQingchun5 小时前
Python - 爬虫-网页抓取数据-库requests
爬虫·python·requests
拓端研究室TRL6 小时前
Python贝叶斯回归、强化学习分析医疗健康数据拟合截断删失数据与参数估计3实例
开发语言·人工智能·python·数据挖掘·回归
wolf犭良6 小时前
27、Python 数据库操作入门(SQLite)从基础到实战精讲
数据库·python·sqlite
sa100276 小时前
基于Python的网络爬虫技术研究
开发语言·爬虫·python