------★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()
完毕!!感谢您的收看
----------★★跳转到历史博文集合★★----------