使用lxml去除html中的tag得到纯文本

主要使用lxml.html.document_fromstring()实现。
### Python 爬虫清理 HTML 标签方法 #### 使用 `scrapy` 的内置函数 Scrapy 提供了实用的标记移除工具,可以方便地清除不需要的HTML标签。具体来说,可以从 `scrapy.utils.markup` 导入两个主要函数: - `remove_tags`: 移除所有的HTML/XML标签并保留其内部文本。 - `remove_tags_with_content`: 不仅会删除指定类型的标签本身还会连同它们的内容一起被去掉。 这使得开发者能够灵活控制哪些部分应该保留在最终的结果里[^1]。 ```python from scrapy.utils.markup import remove_tags, remove_tags_with_content html_fragment = "<div><p>Hello world!</p></div>" clean_text = remove_tags(html_fragment) print(clean_text) # 如果想要移除某些特定标签及其内容,则可如下操作: specific_tag_removal = remove_tags_with_content(html_fragment, which_ones=('script', 'style')) print(specific_tag_removal) ``` #### 利用第三方库 `python-readability` 另一个强大的选项是采用专门设计用于网页内容提取的库——`python-readability`。这个库基于Arc90实验室开发的一个算法实现了一个简洁易用API接口,它能自动识别页面主要内容区域并将其他干扰性的广告、导航栏等内容过滤掉[^2]。 ```python import readability from bs4 import BeautifulSoup raw_html = '<html>...</html>' # 假设这是从网络上获取到的一段完整的HTML字符串 document = Document(raw_html).summary() soup = BeautifulSoup(document, "lxml") text_only = soup.get_text(separator="\n", strip=True) print(text_only) ``` #### 结合 `lxml` 进行更精细的操作 当面对复杂的HTML结构时,`lxml` 是一个非常有效的解决方案。该库允许精确选择节点并通过XPath表达式定位目标元素,从而实现更加细致化的清洗工作。此外,还可以利用正则表达式匹配模式进一步增强处理能力[^3]。 ```python from lxml.html import fromstring import re def clean_html(html_string): tree = fromstring(html_string) # 删除脚本和样式表 for elem in tree.xpath("//script|//style"): elem.drop_tree() # 替换特殊字符实体为对应的Unicode字符 cleaned_text = re.sub(r'&(#?)(\w+);', lambda m: chr(int(m.group(2))) if m.group(1)=='#' else '', html.tostring(tree, encoding='unicode')) return cleaned_text.strip() example_html = """ <html> <head><title>Title</title></head> <body> <p>This is a paragraph.</p> <script type="text/javascript">alert('Hello');</script> <style>.hidden { display:none; }</style> </body> </html> """ result = clean_html(example_html) print(result) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值