【发布时间】:2013-09-02 00:13:31
【问题描述】:
我有以下代码:
soup = BeautifulSoup(text)
for elem in soup.find_all('span', 'finereader'):
elem.replace_with(elem.string or '')
我想使用 lxml,因为我无法使用 BS 产生的缩进。 是否有任何使用 lxml 的等效代码?或者BS的缩进怎么可以省略?
非常感谢您的帮助:)
编辑: BS 产生如下输出:
<html>
<body>
<table border="0" cellpadding="0" cellspacing="0" class="main" frame="box" rules="all" style="table-layout:fixed; width:324.72pt; height:518.64pt;">
<tr class="row">
<td class="cell" style=" width:0.00pt; height:0.00pt;" valign="top">
</td>
<td class="cell" style=" width:169.44pt; height:0.00pt;" valign="top">
</td>
但我想要这样的输出:
<html>
<body>
<table border="0" cellpadding="0" cellspacing="0" class="main" frame="box" rules="all" style="table-layout:fixed; width:324.72pt; height:518.64pt;">
<tr class="row">
<td class="cell" style=" width:0.00pt; height:0.00pt;" valign="top">
</td>
<td class="cell" style=" width:169.44pt; height:0.00pt;" valign="top">
</td>
编辑: 目前,我的整个代码看起来像这样。
output = codecs.open("test.html", "a", "utf-8")
def myfunct():
for i in range(1, 11):
root = lxml.html.parse('http://xyz.xy'+str(nr)+'?action=source').getroot()
for elem in root.xpath("//span[@class='finereader']"):
text = (elem.text or "") + (elem.tail or "")
if elem.getprevious(): # If there's a previous node
previous = elem.getprevious()
previous.tail = (previous.tail or "") + text # append to its tail
else:
parent = elem.getparent() # Otherwise use the parent
parent.text = (parent.text or "") + text # and append to its text
elem.getparent().remove(elem)
for empty in root.xpath('//*[self::b or self::i][not(node())]'):
empty.getparent().remove(empty)
tables = root.cssselect('table.main') #root.xpath('//table[@class="main" and not(ancestor::table[@class="main"])]') #
tables = root.xpath('//table[@class="main" and not(ancestor::table[@class="main"])]')
txt = []
txt += ([lxml.html.tostring(t, method="html", encoding="utf-8") for t in tables])
text = "\n".join(re.sub(r'\[:[\/]?T.*?:\]', '', el) for el in txt) #.splitlines())
output.write(text.decode("utf-8"))
【问题讨论】:
-
“缩进”是什么意思?你有什么问题?
-
我指定了问题。
-
如果我的回答有帮助,请告诉我... lxml 有时可能很挑剔。
-
您的回答非常有帮助,请参阅 cmets。非常感谢! :)
标签: python beautifulsoup lxml