首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用深度学习提升DOM解析——自动提取页面关键区块

用深度学习提升DOM解析——自动提取页面关键区块

原创
作者头像
jackcode
发布于 2025-05-26 03:32:29
发布于 2025-05-26 03:32:29
11900
代码可运行
举报
文章被收录于专栏:爬虫资料爬虫资料
运行总次数:0
代码可运行
爬虫代理
爬虫代理

一、时间轴:一次“抓不到重点”的二手车数据爬虫事故

  • 2025/03/18 09:00

产品经理希望抓取懂车帝平台上“北京地区二手车报价”作为竞品监测数据源。我们初步使用传统XPath方案,试图提取车型、年限、里程、价格等数据。

  • 2025/03/18 10:00

初版脚本运行失败,返回的数据全是空值,XPath定位的路径在页面中根本不存在。

  • 2025/03/18 11:00

检查HTML源代码发现,页面由前端异步渲染(JavaScript动态生成)构建,传统静态DOM无法解析真实内容。

  • 2025/03/18 14:00

改用Playwright模拟浏览器渲染,成功获取完整DOM。但新的问题是:页面结构复杂、不稳定,多个汽车列表卡片并非结构统一,手动XPath依旧容易出错。

  • 2025/03/19 10:00

启动深度学习方案:利用预训练模型BERT对HTML做块级语义识别,自动提取“车卡片”结构与核心字段。


二、方案分析:XPath失效 vs 语义块提取

1. 初始方案失败原因

  • 页面为前端渲染(SPA架构),传统的requests + XPath方案根本无法加载数据;
  • 即使用Playwright动态渲染后获取HTML,汽车信息DOM结构依旧不稳定,嵌套层级深,XPath脆弱;
  • 页面存在部分反爬机制(navigator.webdriver特征、IP频控、UA检测),需解决隐藏身份问题。

2. 深度学习方案构思

  • 将完整HTML节点转为token序列(含标签结构+文本);
  • 使用BERT或LayoutLM模型对DOM节点进行语义分类,标注“车卡片”、“车型名”、“报价”等字段;
  • 利用位置+标签结构配合抽取规则,提高抗变动能力;
  • 构建领域微调训练样本,通过正则与标注相结合构建少量训练集。

三、架构改进方案:深度语义解析 + 隐身身份访问

以下是优化后的爬虫架构,融合了:

  • Playwright动态渲染页面
  • 代理IP隐藏身份(爬虫代理)
  • 设置cookie与user-agent
  • 调用深度学习模块提取语义块

✅ 示例代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import asyncio
from playwright.async_api import async_playwright
import base64
import json
import torch
from transformers import BertTokenizer, BertForTokenClassification
from typing import List

# === 亿牛云代理配置 ===
PROXY_SERVER = "http://proxy.16yun.cn:3100"
PROXY_USERNAME = "16YUN"
PROXY_PASSWORD = "16IP"

# Base64编码代理身份
def get_proxy_auth():
    credentials = f"{PROXY_USERNAME}:{PROXY_PASSWORD}"
    return "Basic " + base64.b64encode(credentials.encode()).decode()

# === 深度学习模型加载(模拟)===
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
model = BertForTokenClassification.from_pretrained("bert-base-chinese")

def predict_blocks(text_list: List[str]) -> List[str]:
    """
    使用BERT模拟DOM区块分类
    输入:文本列表(如标签+内容组成)
    输出:每个文本的分类结果,如[车型] [年限] [报价]
    """
    inputs = tokenizer(text_list, return_tensors="pt", padding=True, truncation=True)
    with torch.no_grad():
        outputs = model(**inputs).logits
    predictions = torch.argmax(outputs, dim=-1)
    labels = [model.config.id2label[idx.item()] for idx in predictions[0]]
    return labels

# === Playwright爬虫主流程 ===
async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)

        # 启动代理 + 设置UA和Cookie
        context = await browser.new_context(
            proxy={"server": PROXY_SERVER},
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/122.0.0.0 Safari/537.36",
            extra_http_headers={
                "Proxy-Authorization": get_proxy_auth(),
                "Cookie": "your_cookie_here"  # 真实抓包填入cookie
            }
        )
        
        page = await context.new_page()

        # 搜索“北京二手车”
        await page.goto("https://www.dongchedi.com/usedcar/search?city_name=%E5%8C%97%E4%BA%AC")
        await page.wait_for_timeout(5000)  # 等待JS加载完

        # 提取页面HTML
        html = await page.content()

        # 简化提取所有车卡片文本(真实项目中解析DOM结构)
        elements = await page.query_selector_all("div.CarCard_card__...")  # 选择器根据真实页面调整
        for el in elements:
            text = await el.inner_text()
            label = predict_blocks([text])[0]
            print(f"[{label}] {text}")

        await browser.close()

asyncio.run(main())

四、总结与优化建议

📌 深度学习DOM解析优点:

  • 抗结构变化能力强,不再依赖脆弱的XPath;
  • 适合复杂网页(如懂车帝、汽车之家等)中提取卡片、列表、评论等区域;
  • 可结合小样本微调适应特定领域,如二手车、新闻等。

⚙️ 技术架构演进图

代码语言:latex
AI代码解释
复制
[静态爬虫Requests+XPath] ──> [动态爬虫Playwright+XPath] ──> [Playwright+DOM语义BERT]
             ❌失效                          ⚠️结构脆弱                     ✅语义提取,稳定高效

附加建议

  • 如需更高精度,可构建100~300条有标注数据微调BERT;
  • 可加入图神经网络(如DOM-GCN)提升DOM上下文理解;
  • 建议结合VisualDOM信息(元素位置+截图)形成多模态提取模型。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据可视化实战:如何采集并分析马蜂窝上的热门旅游信息?
大家应该也有这种感觉吧,现在出去旅游,做攻略几乎成了“信息大战”——去哪玩?怎么玩?值不值得?网上各种推荐、评论、问答混在一起,有时候看得头都大了。
jackcode
2025/06/11
1100
数据可视化实战:如何采集并分析马蜂窝上的热门旅游信息?
爬虫系列之瓜子二手车抓手
分析发现,多页面不同之处在于'o2'处,这里的2即为和页数,也就是说我只需要拿到页面的总页数,循环遍历即可,这就是本爬虫的核心思路,那么怎么拿到呢?看下图:
公众号guangcity
2019/09/20
1.6K0
爬虫系列之瓜子二手车抓手
瓜子二手车市场分析(Scrapy+Tableau)
本文对瓜子网杭州二手车进行了爬取和简单分析,一方面是为了进一步熟练使用Python的Scrapy爬虫框架,另一方面是为了熟悉Tableau强大的数据可视化功能。
luanhz
2020/03/31
1K0
瓜子二手车市场分析(Scrapy+Tableau)
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法
小华同学ai
2025/04/25
8570
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
如何利用 Puppeteer 的 Evaluate 函数操作网页数据
在现代的爬虫技术中,Puppeteer 因其强大的功能和灵活性而备受青睐。Puppeteer 是一个用于控制 Chromium 或 Chrome 浏览器的 Node.js 库,提供了丰富的 API 接口,能够帮助开发者高效地处理动态网页数据。本文将重点讲解 Puppeteer 的 evaluate 函数,结合代理 IP 技术,演示如何采集目标网站(如界面新闻)上的文章标题和摘要。
jackcode
2024/11/21
2070
如何利用 Puppeteer 的 Evaluate 函数操作网页数据
一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记
• 17:00:开发人员小李正在尝试利用 Python 爬虫从企查查(https://www.qcc.com https://www.qcc.com)抓取公司工商信息。原本一切正常,但突然发现信息采集失败,程序抛出大量选择器错误。
jackcode
2025/02/13
1360
一场始于 Selector Error 的拯救行动:企查查数据采集故障排查记
使用 Puppeteer 绕过 Captcha:实现商家数据自动化采集
大众点评作为中国领先的本地生活服务平台,不仅是消费者获取商家信息和用户评价的重要工具,同时也是商家推广的关键渠道。通过优质的内容呈现和精准的用户推荐,大众点评能够为商家带来显著的流量提升和品牌曝光,成为商业竞争中不可忽视的资源。
jackcode
2024/11/25
2040
使用 Puppeteer 绕过 Captcha:实现商家数据自动化采集
Pyppeteer Python加载扩展及示例
Pyppeteer 是一个 Python 库,可以控制无头 Chrome 或 Chromium 浏览器,并在网页加载过程中加载扩展来增强浏览器功能。Pyppeteer 提供了一个 API,让您可以与无头浏览器交互,完成网页抓取、自动化测试、网页截图或 PDF 生成等任务。加载扩展的功能可以让您在浏览器导航到网页时,运行自定义的 JavaScript 代码,从而改变浏览器的行为。您可以在页面加载之前对页面进行操作,例如修改 DOM(文档对象模型)、拦截网络请求、注入其他脚本等。一些常见的加载扩展的用例有:
jackcode
2023/06/13
5340
Pyppeteer Python加载扩展及示例
用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)
用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)
猫头虎
2025/06/02
2.2K0
用 Python 写你的第一个爬虫:小白也能轻松搞定数据抓取(超详细包含最新所有Python爬虫库的教程)
深度学习在DOM解析中的应用:自动识别页面关键内容区块
本文介绍了如何在爬取东方财富吧(https://www.eastmoney.com)财经新闻时,利用深度学习模型对 DOM 树中的内容区块进行自动识别和过滤,并将新闻标题、时间、正文等关键信息分类存储。文章聚焦爬虫整体性能瓶颈,通过指标对比、优化策略、压测数据及改进结果,展示了从单页耗时约 5 秒优化到约 2 秒的过程,极大提升了工程效率。
jackcode
2025/04/23
1040
深度学习在DOM解析中的应用:自动识别页面关键内容区块
Python和BeautifulSoup库的魔力:解析TikTok视频页面
短视频平台如TikTok已成为信息传播和电商推广的重要渠道。用户通过短视频分享生活、创作内容,吸引了数以亿计的观众,为企业和创作者提供了广阔的市场和宣传机会。然而,要深入了解TikTok上的视频内容以及用户互动情况,需要借助爬虫技术。本文将介绍如何使用Python和BeautifulSoup库解析TikTok视频页面,并通过统计分析视频信息,帮助您更好地利用这一重要渠道。
jackcode
2023/11/07
6260
Python和BeautifulSoup库的魔力:解析TikTok视频页面
[1291]Playwright教程
这种类型的python库有好多种,鼎鼎大名的selenium,还有playwright、Pyppeteer等。
周小董
2024/12/20
9130
[1291]Playwright教程
Pyppeteer实战:基于Python的无头浏览器控制新选择
在互联网信息爆炸的今天,如何高效获取目标数据成为了一项核心竞争力。本文将带大家走进 Pyppeteer 的世界,通过实战案例对接目标网站 小红书 的热点推荐信息(包括标题、内容和评论),并详细讲解如何利用爬虫代理实现 IP 代理防封、设置 Cookie 与自定义 User-Agent 等操作。整个项目从数据采集、关键信息解构到代码演变可视化,都遵循开源侦探型思路,力图打通从数据获取到数据分析的每一环节。
jackcode
2025/04/09
2070
Pyppeteer实战:基于Python的无头浏览器控制新选择
Puppeteer教程:使用CSS选择器点击和爬取动态数据
在现代的网页中,许多数据是通过JavaScript动态加载的,这使得传统的爬虫工具(如requests或BeautifulSoup)无法获取到这些数据。因此,为了更好地处理动态网站的数据爬取,我们需要使用像Puppeteer这样的浏览器自动化工具。
jackcode
2024/11/14
3420
Puppeteer教程:使用CSS选择器点击和爬取动态数据
如何让你在众多二手车中挑中满意的?python帮你实现(附源码)
老司机带你去看车,网上的几千条的二手车数据,只需几十行代码,就可以统统获取,保存数据到我们本地电脑上
松鼠爱吃饼干
2020/09/15
4060
如何让你在众多二手车中挑中满意的?python帮你实现(附源码)
强大易用!新一代爬虫利器 Playwright 的介绍
Playwright 是微软在 2020 年初开源的新一代自动化测试工具,它的功能类似于 Selenium、Pyppeteer 等,都可以驱动浏览器进行各种自动化操作。它的功能也非常强大,对市面上的主流浏览器都提供了支持,API 功能简洁又强大。虽然诞生比较晚,但是现在发展得非常火热。
崔庆才
2021/12/10
7.6K0
强大易用!新一代爬虫利器 Playwright 的介绍
如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据
网页数据的抓取已经成为数据分析、市场调研等领域的重要工具。无论是获取产品价格、用户评论还是其他公开数据,网页抓取技术都能提供极大的帮助。今天,我们将探讨如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据。PHP Simple HTML DOM Parser 是一个轻量级库,允许我们轻松地解析和抓取 HTML 内容。
jackcode
2024/08/01
1.3K0
如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据
比Selenium更优秀的playwright介绍与未来展望
Playwright是微软开发的,专门为满足端到端测试需求而创建的。Playwright支持包括Chromium、WebKit和Firefox在内的所有现代渲染引擎。在Windows、Linux和macOS上进行测试,本地或在CI上,无头或有头,带有本机移动仿真。
JadePeng
2024/05/16
5990
比Selenium更优秀的playwright介绍与未来展望
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
在网络数据爬取中,如何精准、有效地抓取网页中的关键元素是核心问题之一。尤其对于动态网页来说,JavaScript渲染的内容无法通过传统的静态爬虫工具(如 requests、BeautifulSoup 等)获取。因此,使用能够控制浏览器的自动化工具 Puppeteer 就成了一种理想选择。
jackcode
2024/11/19
2420
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
在现代 Web 自动化领域,Playwright 通过其多语言支持可在 Python、Java 及 .NET 三大生态中共享同一底层实现,简化了跨团队协作与维护成本 。然而,若忽略代理IP等必要配置,很容易导致功能异常或被目标网站限制,本文将以反面教材的形式,通过错误示例 → 问题剖析 → 修复过程 → 总结教训,完整演示如何使用爬虫代理(示例域名、端口、用户名、密码)并结合其它策略设置,从 https://www.dongchedi.com 上按汽车型号关键词搜索车友圈问答并进行数据存储与分析 。
jackcode
2025/05/19
1310
Playwright 多语言一体化——Python/Java/.NET 全栈采集实战
推荐阅读
相关推荐
数据可视化实战:如何采集并分析马蜂窝上的热门旅游信息?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验