【问题标题】:Prevent python lxml from adding plain text a <p> tag防止 python lxml 添加纯文本 <p> 标签
【发布时间】:2016-10-05 04:53:43
【问题描述】:

我不希望 lxml 向纯文本添加任何内容。我故意离开他们。 lxml 添加纯文本 &lt;p&gt; 标签。这里value 可能是html 或纯文本。我需要 lxml 来处理 html 并留下纯文本。

import lxml.html
mixed = ['plaintext', '<a>HTML</a>', '<a>HTML</a>']
for text in mixed:
    html = lxml.html.fromstring(text)
    print(lxml.html.tostring(html))

输出: b'&lt;p&gt;plaintext&lt;/p&gt;' b'&lt;a&gt;HTML&lt;/a&gt;' b'&lt;a&gt;HTML&lt;/a&gt;'

我需要的是: b'plaintext' b'&lt;a&gt;HTML&lt;/a&gt;' b'&lt;a&gt;HTML&lt;/a&gt;'

所以我想出了几个问题。

  1. 如何知道一个 sn-p 是纯的,没有任何 html 标签? (这样我就不必将它们传递给 lxml),或者
  2. 如何阻止 lxml 在纯文本中添加&lt;p&gt; 标签?

【问题讨论】:

  • 你能添加一个例子,说明你有什么作为输入和你想要什么作为输出吗?
  • @PadraicCunningham,我现在举了一个简短的例子。
  • 不确定是否可以使用 lxml,有多种方法可以检查您是否有 html,只需检查以 &lt; 开头的字符串或使用更复杂的正则表达式。
  • 试试html.parser,crummy.com/software/BeautifulSoup/bs4/doc/…,用bs4替换lxml更好的选择。

标签: python lxml


【解决方案1】:

试试这个库...在处理 XML 页面时,我不必使用“re”模块,因为某些愚蠢的原因,scrapy selctors 工作不稳定...

from w3lib.html import remove_tags

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    follow = hxs.xpath('//loc').re('.*type=videos.*')
    follow = [remove_tags(x) for x in follow]
    # It wont remove regex lines like \n

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 2012-06-30
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    相关资源
    最近更新 更多