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
相关产品推荐
相关产品推荐

