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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值