当前位置: 首页 > article >正文

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/
在这里插入图片描述

# -*- 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


http://www.kler.cn/a/556358.html

相关文章:

  • Java集合框架之List接口详解
  • 新数据结构(12)——代理
  • 使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应
  • 客服系统自动化方案:揭秘全渠道智能服务解决方案 vx: haotsh
  • deepseek linux本地化部署
  • ROM(固态硬盘)与RAM(内存,缓存)
  • Fluent M3U8 v0.5 一款开源免费的m3u8文件下载工具,由B站大佬 @呆唯男友 开发
  • 【NLP】注意力机制
  • buu-[OGeek2019]babyrop-好久不见41
  • Mac arm架构使用 Yarn 全局安装 Vue CLI
  • Brave132编译指南 Linux篇 - Brave简介(一)
  • SkyWalking快速入门
  • ubuntu追加path环境变量
  • 使用爬虫按关键字搜索亚马逊商品:实战指南
  • selenium环境搭建
  • DeepSeek 与网络安全:AI 在网络安全领域的应用与挑战
  • 天 锐 蓝盾终端安全管理系统:办公U盘拷贝使用管控限制
  • 上下文感知 AI Agent 将赋予我们的“超能力”
  • 2后端JAVA:下载数据库数据到EXCEL表格?代码
  • [Android]使用AlarmManager设置周期性任务