You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium爬取网页文本时如何将CSS格式转为Markdown保留样式

解决方案

你不需要修改Selenium元素的只读text属性,直接通过遍历DOM节点拼接生成带Markdown标记的文本即可,以下是两种可直接落地的实现方案:

方案一:浏览器端JS递归生成(推荐,性能更高)

直接通过Selenium执行JS脚本遍历block下的所有节点,匹配格式规则后直接返回处理完成的Markdown文本,无需额外解析HTML。

  • 第一步:定义格式映射规则,可根据目标网站的实际类名调整
# 格式映射:键为元素类名,值为对应的Markdown包裹标记
FORMAT_RULES = {
    "bold": "**",
    "italic": "*",
    "underline": "__"
}
  • 第二步:封装处理函数
def get_formatted_markdown(driver, block_element, format_rules):
    process_js = """
    const rules = arguments[0];
    function traverse(node) {
        // 处理纯文本节点
        if (node.nodeType === Node.TEXT_NODE) return node.textContent;
        // 处理元素节点
        if (node.nodeType === Node.ELEMENT_NODE) {
            let child_content = '';
            // 递归处理所有子节点
            node.childNodes.forEach(child => child_content += traverse(child));
            // 匹配格式规则加标记
            for (const cls in rules) {
                if (node.classList.contains(cls)) return rules[cls] + child_content + rules[cls];
            }
            return child_content;
        }
        return '';
    }
    return traverse(arguments[1]);
    """
    return driver.execute_script(process_js, format_rules, block_element)
  • 第三步:直接调用获取结果存入数据库
formatted_content = get_formatted_markdown(driver, block, FORMAT_RULES)
# 后续执行数据库写入操作即可

方案二:Python端用BeautifulSoup解析生成

如果更习惯在Python侧处理,可以先提取元素的HTML源码,再用BeautifulSoup解析拼接:

  • 第一步:安装依赖
    pip install beautifulsoup4
  • 第二步:封装处理函数
from bs4 import BeautifulSoup

FORMAT_RULES = {
    "bold": "**",
    "italic": "*",
    "underline": "__"
}

def parse_html_to_md(html_str, format_rules):
    soup = BeautifulSoup(html_str, "html.parser")
    def traverse(node):
        if isinstance(node, str):
            return node
        content = "".join([traverse(child) for child in node.contents])
        for cls, tag in format_rules.items():
            if cls in node.get("class", []):
                return tag + content + tag
        return content
    return traverse(soup)
  • 第三步:调用获取结果
block_html = block.get_attribute("outerHTML")
formatted_content = parse_html_to_md(block_html, FORMAT_RULES)
# 写入数据库即可

两种方案都完全避开了Selenium元素属性只读的限制,不需要修改原元素的任何内容,直接从DOM结构生成符合要求的带格式Markdown文本,可根据实际需求扩展规则支持链接、列表、图片等更多格式转换。

内容的提问来源于stack exchange,提问作者gorgias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 22:06:02