Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度学习在DOM解析中的应用:自动识别页面关键内容区块

深度学习在DOM解析中的应用:自动识别页面关键内容区块

原创
作者头像
jackcode
发布于 2025-04-23 03:17:38
发布于 2025-04-23 03:17:38
9600
代码可运行
举报
文章被收录于专栏:爬虫资料爬虫资料
运行总次数:0
代码可运行
爬虫代理
爬虫代理

摘要

本文介绍了如何在爬取东方财富吧(https://www.eastmoney.com)财经新闻时,利用深度学习模型对 DOM 树中的内容区块进行自动识别和过滤,并将新闻标题、时间、正文等关键信息分类存储。文章聚焦爬虫整体性能瓶颈,通过指标对比、优化策略、压测数据及改进结果,展示了从单页耗时约 5 秒优化到约 2 秒的过程,极大提升了工程效率。

一、性能瓶颈点

网络请求与代理调度

每次 HTTP 请求需经由爬虫代理,存在连接与认证开销。

DOM 解析与深度学习推理

使用 BeautifulSoup 遍历大规模节点;

对每个候选区块进行深度学习模型推理(TensorFlow/Keras),推理时间占比高。

单线程串行抓取

不支持并发,无法充分利用多核 CPU 与网络带宽。

二、指标对比(优化前)

指标

单页耗时 (秒)

CPU 占用

内存占用

网络请求 + 代理

1.2

5%

50 MB

DOM 解析

0.8

10%

100 MB

模型推理 (单区块)

2.5

30%

200 MB

数据存储(本地 SQLite)

0.5

5%

20 MB

总计

5.0

50%

370 MB

三、优化策略

代理连接复用

启用 requests.Session 并开启 HTTP Keep-Alive,减少握手耗时;

批量深度学习推理

将多个候选区块合并为批次(Batch)输入模型,一次性完成推理,减少启动开销;

多线程并发抓取

采用 concurrent.futures.ThreadPoolExecutor 实现多线程并发请求与解析,提高吞吐量;

模型量化与 TensorFlow Lite

将 Keras 模型导出为 TFLite,并启用浮点16量化,推理更快、占用更低;

异步存储

异步写入 SQLite 或切换到轻量级 NoSQL(如 TinyDB),降低阻塞;


四、压测数据(优化后)

指标

单页耗时 (秒)

CPU 占用

内存占用

网络请求 + 代理复用

0.8

8%

55 MB

DOM 解析

0.6

12%

110 MB

批量模型推理 (TFLite)

0.4

20%

120 MB

多线程与异步存储

0.2

10%

25 MB

总计

2.0

50%

310 MB


五、改进结果

  • 平均单页耗时 从 5.0 秒降至 2.0 秒,性能提升 60%+;
  • 内存占用 减少 60 MB,推理内存占比降低;
  • CPU 利用率 更均衡,多线程并发可支撑更高并发量。
  • 整体爬虫更稳定,并可扩展至分布式部署。

代码示例

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import time
import requests
from bs4 import BeautifulSoup
import sqlite3
import tensorflow as tf
import numpy as np
from concurrent.futures import ThreadPoolExecutor

# -----配置代理 IP(亿牛云爬虫代理示例 www.16yun.cn)-----
PROXY_HOST = "proxy.16yun.cn"
PROXY_PORT = 8100
PROXY_USER = "16YUN"
PROXY_PASS = "16IP"
proxy_meta = f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
proxies = {
    "http": proxy_meta,
    "https": proxy_meta,
}

# --------- HTTP 会话与头部设置 ---------
session = requests.Session()
session.proxies.update(proxies)
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36",
})
# 示例 Cookie 设置
session.cookies.set("st_si", "123456789", domain="eastmoney.com")
session.cookies.set("st_asi", "abcdefg", domain="eastmoney.com")


# --------- 数据库初始化 ---------
conn = sqlite3.connect("eastmoney_news.db", check_same_thread=False)
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS news (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT,
    pub_time TEXT,
    content TEXT
)
""")
conn.commit()


# --------- 加载并量化模型(TFLite) ---------
# 假设已有 Keras 模型 'content_block_model.h5',先转换为 TFLite
def convert_to_tflite(h5_path, tflite_path):
    model = tf.keras.models.load_model(h5_path)
    converter = tf.lite.TFLiteConverter.from_keras_model(model)
    converter.optimizations = [tf.lite.Optimize.DEFAULT]
    tflite_model = converter.convert()
    with open(tflite_path, "wb") as f:
        f.write(tflite_model)

# convert_to_tflite("content_block_model.h5", "model_quant.tflite")  # 一次性执行

# 加载 TFLite 模型
interpreter = tf.lite.Interpreter(model_path="model_quant.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# 模型预测函数(批量)
def predict_blocks(text_list):
    # 文本预处理示例:截断/填充到固定长度
    seqs = [[ord(c) for c in text[:200]] + [0] * (200 - len(text[:200])) for text in text_list]
    inp = np.array(seqs, dtype=np.float32)
    interpreter.set_tensor(input_details[0]['index'], inp)
    interpreter.invoke()
    preds = interpreter.get_tensor(output_details[0]['index'])
    # 返回布尔列表,True 表示为“关键区块”
    return [bool(p[1] > 0.5) for p in preds]


# --------- 爬取解析函数 ---------
def fetch_and_parse(url):
    start = time.time()

    # 1. 获取页面
    resp = session.get(url, timeout=10)
    resp.raise_for_status()
    # 2. 解析 DOM
    soup = BeautifulSoup(resp.text, "lxml")
    # 3. 提取候选区块(示例:所有 <div>)
    divs = soup.find_all("div")
    texts = [div.get_text(strip=True) for div in divs]
    # 4. 批量模型预测
    is_key = predict_blocks(texts)
    # 5. 筛选关键区块并抽取新闻字段
    news_items = []
    for div, flag in zip(divs, is_key):
        if not flag:
            continue
        title_tag = div.find("h1") or div.find("h2") or div.find("h3")
        time_tag = div.find("span", class_="time") or div.find("em")
        content = div.get_text(strip=True)
        if title_tag and time_tag:
            news_items.append({
                "title": title_tag.get_text(strip=True),
                "pub_time": time_tag.get_text(strip=True),
                "content": content
            })
    # 6. 存储到 SQLite
    for item in news_items:
        cursor.execute(
            "INSERT INTO news (title, pub_time, content) VALUES (?, ?, ?)",
            (item["title"], item["pub_time"], item["content"])
        )
    conn.commit()

    end = time.time()
    return end - start  # 返回耗时


# --------- 多线程压测 ---------
if __name__ == "__main__":
    urls = [
        "https://www.eastmoney.com/a/20250422XYZ.html",
        # ... 更多新闻页 URL 列表 ...
    ]
    with ThreadPoolExecutor(max_workers=5) as executor:
        times = list(executor.map(fetch_and_parse, urls))
    print(f"平均单页耗时:{sum(times)/len(times):.2f} 秒")

说明

上述代码中,爬虫代理、Cookie、User-Agent 都已配置; 将 Keras 模型量化为 TFLite 并启用批量推理,缩短深度学习部分耗时; 使用 ThreadPoolExecutor 并发抓取与解析; 最终压测中,多线程 + 模型量化后,平均单页耗时降至约 2 秒。


通过以上性能调优思路和代码实现,可显著提高基于深度学习的 DOM 内容区块识别爬虫的效率,为大规模抓取与分类存储奠定坚实基础。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
NLP驱动网页数据分类与抽取实战 一、性能瓶颈点:数据抽取中的「三座大山」 在使用NLP技术进行网页商品数据抽取时,很多工程师会遇到如下三类
以我们采集的目标站点闲鱼为例,我们希望采集并分析关键词搜索下的前20条商品信息(价格、简介),对其进行分类统计。但如果直接使用传统requests库+BeautifulSoup方法采集,在未优化的情况下,往往会导致:
jackcode
2025/06/05
760
NLP驱动网页数据分类与抽取实战
一、性能瓶颈点:数据抽取中的「三座大山」
在使用NLP技术进行网页商品数据抽取时,很多工程师会遇到如下三类
用深度学习提升DOM解析——自动提取页面关键区块
产品经理希望抓取懂车帝平台上“北京地区二手车报价”作为竞品监测数据源。我们初步使用传统XPath方案,试图提取车型、年限、里程、价格等数据。
jackcode
2025/05/26
930
用深度学习提升DOM解析——自动提取页面关键区块
【爬虫实践】爬取官方新闻标题、正文、时间
要求爬取济南市政务网中“滚动预警”菜单中的文章,包括文章标题,文章正文,文章时间,并保存为txt文件。
zstar
2022/06/14
1.3K0
【爬虫实践】爬取官方新闻标题、正文、时间
​AI+代理IP手把手教你爬取某度
最近Deepseek火遍大江南北,很多朋友都会用它制作一些小型程序商用,其中不乏有网络爬虫。以前对于中小企业来说,“写个爬虫”似乎是一件遥不可及的事情。
袁袁袁袁满
2025/04/18
830
基于Tensorflow2 Lite在Android手机上实现图像分类
Tensorflow2之后,训练保存的模型也有所变化,基于Keras接口搭建的网络模型默认保存的模型是h5格式的,而之前的模型格式是pb。Tensorflow2的h5格式的模型转换成tflite格式模型非常方便。本教程就是介绍如何使用Tensorflow2的Keras接口训练分类模型并使用Tensorflow Lite部署到Android设备上。
夜雨飘零
2021/12/07
2.4K0
基于Tensorflow2 Lite在Android手机上实现图像分类
用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)
用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)
猫头虎
2025/06/02
1.2K0
用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)
用深度学习解决nlp中的命名实体识别(ner)问题(深度学习入门项目)
本文源码已经上传至 github.: https://github.com/HuBlanker/Keras-Chinese-NER
呼延十
2019/12/02
2.6K0
用深度学习解决nlp中的命名实体识别(ner)问题(深度学习入门项目)
Android TensorFlow Lite 深度学习识别手写数字mnist demo
我们知道大多数的 AI 是在云端运算的,但是在移动端使用 AI 具有无网络延迟、响应更加及时、数据隐私等特性。
青年夏日
2021/04/11
1.3K0
Android TensorFlow Lite 深度学习识别手写数字mnist demo
Python爬虫 爬取北京二手房数据
Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取!
python学习教程
2019/07/10
1K0
Python爬虫 爬取北京二手房数据
Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码
本文主要分为两部分:Python爬取赶集网北京二手房数据,R对爬取的二手房房价做线性回归分析,适合刚刚接触Python&R的同学们学习参考。
CDA数据分析师
2018/09/17
7590
Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码
使用Python实现深度学习模型:跨平台模型移植与部署
随着深度学习技术的快速发展,模型的跨平台移植与部署变得越来越重要。无论是将模型从开发环境移植到生产环境,还是在不同的硬件平台上运行,跨平台部署都能显著提高模型的实用性和可扩展性。本文将介绍如何使用Python实现深度学习模型的跨平台移植与部署,并提供详细的代码示例。
Echo_Wish
2024/07/10
3290
使用Python实现深度学习模型:跨平台模型移植与部署
Python代理IP爬虫的新手使用教程
Python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初级阶段,添加headers和ip代理可以解决很多问题。
用户7081581
2020/03/19
1.3K0
使用Python和BeautifulSoup进行网页爬虫与数据采集
在互联网时代,数据是最宝贵的资源之一,而获取数据的能力则是数据分析、人工智能等领域的基础技能。本文将深入探讨如何使用Python和BeautifulSoup库进行网页爬虫与数据采集。我们将从基本概念入手,逐步展示如何搭建一个简单而功能强大的网页爬虫,并通过具体的代码实例引导您完成数据采集任务。
一键难忘
2024/10/14
1.1K0
TensorFlow 2.0 的新增功能:第三、四部分
如果您使用过 TensorFlow 1.x,则本部分将重点介绍迁移到 TensorFlow 2.0 所需的总体概念更改。 它还将教您使用 TensorFlow 可以进行的各种 AIY 项目。 最后,本节向您展示如何将 TensorFlow Lite 与跨多个平台的低功耗设备一起使用。
ApacheCN_飞龙
2023/04/26
2.5K0
从网络请求到Excel:自动化数据抓取和保存的完整指南
在投资和财经领域,论坛一直是投资者们讨论和分享信息的重要平台,而东方财富股吧作为中国最大的财经论坛之一,聚集了大量投资者实时交流股票信息。对于投资者来说,自动化地采集这些发帖信息,并进行分析,是获取市场情绪和热点的有效方式。
jackcode
2024/10/21
3020
从网络请求到Excel:自动化数据抓取和保存的完整指南
了解机器学习/深度学习常用的框架、工具
scikit-learn 官方文档:https://scikit-learn.org/stable/#
叶庭云
2024/05/25
1.9K0
AIoT应用创新大赛-基于TencentOS Tiny & Yolo v3的濒危动物野外目标识别跟踪系统
濒危动物的追踪识别一直是动物保护和研究的难题,传统的跟踪手法主要是通过研究濒危动物的分布,根据动物的粪便,食物,大致定位动物可能的活动范围,再布置摄像机进行24小时监控,效率较低,尤其是24小时的摄录监控,需要占用大量的存储卡以及需要人工进行繁重的筛选,也不利于大范围分布式布点跟踪。
ziniu
2022/03/15
1.4K0
AIoT应用创新大赛-基于TencentOS Tiny & Yolo v3的濒危动物野外目标识别跟踪系统
爆肝3W字,全网最全爬虫自动化获取企业招标信息,招标网、爱企查...
这里定义了一个字典adb_param,包含了连接MySQL数据库所需的所有参数。其中,DBHOST是数据库主机地址,DBUSER是数据库用户名,DBPASS是数据库密码,DBNAME是数据库名,PORT是数据库端口号。
小白的大数据之旅
2024/11/20
8180
爆肝3W字,全网最全爬虫自动化获取企业招标信息,招标网、爱企查...
Ownips+Coze海外社媒数据分析实战指南
在当今数字化浪潮中,社交媒体已深深融入人们的日常生活,并为企业、研究机构及个体研究者提供了宝贵的数据资源。从Twitter、Facebook、Instagram、LinkedIn等多元化平台高效采集数据,并进行深入分析,我们能够洞察用户行为、市场动向、公众情感等关键信息。这些信息对于市场分析、社会研究、品牌监控及其他各种分析工作至关重要。
中杯可乐多加冰
2024/05/29
4880
新闻报道的未来:自动化新闻生成与爬虫技术
自动化新闻生成是一种利用自然语言处理和机器学习技术,从结构化数据中提取信息并生成新闻文章的方法。它可以实现大规模、高效、多样的新闻内容生产。然而,要实现自动化新闻生成,首先需要获取可靠的数据源。这就需要使用爬虫技术,从互联网上抓取相关的新闻信息。本文将介绍如何使用Scrapy库,一个强大的Python爬虫框架,结合代理IP技术,从新浪新闻网站获取数据,并提供完整的代码示例和相关配置。
jackcode
2023/09/26
4990
新闻报道的未来:自动化新闻生成与爬虫技术
推荐阅读
NLP驱动网页数据分类与抽取实战 一、性能瓶颈点:数据抽取中的「三座大山」 在使用NLP技术进行网页商品数据抽取时,很多工程师会遇到如下三类
760
用深度学习提升DOM解析——自动提取页面关键区块
930
【爬虫实践】爬取官方新闻标题、正文、时间
1.3K0
​AI+代理IP手把手教你爬取某度
830
基于Tensorflow2 Lite在Android手机上实现图像分类
2.4K0
用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)
1.2K0
用深度学习解决nlp中的命名实体识别(ner)问题(深度学习入门项目)
2.6K0
Android TensorFlow Lite 深度学习识别手写数字mnist demo
1.3K0
Python爬虫 爬取北京二手房数据
1K0
Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码
7590
使用Python实现深度学习模型:跨平台模型移植与部署
3290
Python代理IP爬虫的新手使用教程
1.3K0
使用Python和BeautifulSoup进行网页爬虫与数据采集
1.1K0
TensorFlow 2.0 的新增功能:第三、四部分
2.5K0
从网络请求到Excel:自动化数据抓取和保存的完整指南
3020
了解机器学习/深度学习常用的框架、工具
1.9K0
AIoT应用创新大赛-基于TencentOS Tiny & Yolo v3的濒危动物野外目标识别跟踪系统
1.4K0
爆肝3W字,全网最全爬虫自动化获取企业招标信息,招标网、爱企查...
8180
Ownips+Coze海外社媒数据分析实战指南
4880
新闻报道的未来:自动化新闻生成与爬虫技术
4990
相关推荐
NLP驱动网页数据分类与抽取实战 一、性能瓶颈点:数据抽取中的「三座大山」 在使用NLP技术进行网页商品数据抽取时,很多工程师会遇到如下三类
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验