[英]How can I remove all elements matching an xpath in python using lxml?
[英]How can I remove bad data in an XPath element using Python?
我有这个简短的例子来证明我的问题:
from lxml import html
post = """<p>This a page with URLs.
<a href="http://google.com">This goes to
 Google</a><br/>
<a href="http://yahoo.com">This 
 goes to Yahoo!</a><br/>
<a
href="http://example.com">This is invalid due to that
line feed character</p>
"""
doc = html.fromstring(post)
for link in doc.xpath('//a'):
print link.get('href')
这输出:
http://google.com
http://yahoo.com
None
问题是我的数据有

嵌入其中的字符。 对于我的上一个链接,它直接嵌入在锚点和href属性之间。 在元素之外的换行对我来说很重要。
doc.xpath('//a')
正确地将<a
href="http://example.com">
视为链接,但是当我执行link.get('href')
时它无法访问href
属性link.get('href')
。
如果link.get('href')
返回None
,我该如何清理数据,这样我仍然可以检索发现的href
属性?
我无法剥离所有

整个post
元素中的字符与文本中的字符很重要。
由于您需要标签之外的数据,您可以尝试使用unidecode 。 它没有处理中文和韩文,但它会做一些事情,比如将左右引号改为ASCII引号。 它应该有助于这些

字符也是如此,将它们更改为空格而不是不间断的空格。 希望这是保留其他数据所需的全部内容。 str.replace(u"\\#xa", u" ")
如果ascii空间没问题就不那么重了。
import unidecode, urllib2
from lxml import html
html_text = urllib2.urlopen("http://www.yourwebsite.com")
ascii_text = unidecode.unidecode(html_text)
html.fromstring(ascii_text)
在几个Python版本中似乎存在已知问题 。 它也是C# 。 一个相关的封闭问题似乎表明问题已经关闭,因为XML属性标记不是为了支持回车而构建的,所以在所有xml上下文中转义它都会很愚蠢。 事实证明,W3C规范要求在解析时放入unicode( 参见第1节 )。
所有换行必须在输入到#xA时进行标准化,如2.11行结束处理中所述,因此该算法的其余部分对以这种方式标准化的文本进行操作。
您可以通过以下方式解决您的具
post = post.replace('
', '\n')
得出的测试程序:
from lxml import html
post = """<p>This a page with URLs.
<a href="http://google.com">This goes to
 Google</a><br/>
<a href="http://yahoo.com">This 
 goes to Yahoo!</a><br/>
<a
href="http://example.com">This is invalid due to that
line feed character</p>
"""
post = post.replace('
', '\n')
doc = html.fromstring(post)
for link in doc.xpath('//a'):
print link.get('href')
输出:
http://google.com
http://yahoo.com
http://example.com
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.