我需要在Python中做一个看似简单的事情,结果证明是非常复杂的。我需要做的是:
table
。我不能简单地执行re.sub()
,因为在每种情况下,替换字符串都是不同的并且基于原始字符串。
有什么建议吗?
答案 0 :(得分:1)
您可以使用Beautiful Soup来执行此操作。
虽然对于你需要的东西,像lxml.etree这样简单的东西可以正常工作。
答案 1 :(得分:0)
听起来像你想要BeautifulSoup。可能,你想要做的事情如下:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)
tables = soup.find_all( 'table' )
for table in tables:
contents = str( table.contents )
new_contents = transform( contents )
table.replaceWith( new_contents )
或者,您可能正在寻找更接近soup.replace_with
编辑:已更新至最终解决方案。
答案 2 :(得分:0)
我发现通过BeautifulSoup或任何其他此类解析解析HTML变得复杂,因为您需要解析不同的页面,有时结构不正确,使用javascript操作等等。在这种情况下,最佳解决方案是直接访问浏览器DOM并修改和查询节点。你可以在像phanotomjs这样的无头浏览器中轻松实现这一点。 例如这是一个phantomjs脚本
var page = require('webpage').create();
page.content = '<html><body><table><tr><td>1</td><td>2</td></tr></table></html>';
page.evaluate(function () {
var elems = document.getElementsByTagName('td')
for(var i=0;i<elems.length;i++){
elems[i].innerHTML = '!'+elems[i].innerHTML+'!';
}
});
console.log(page.content);
phantom.exit();
它会更改所有td
文本,输出为
<html><head></head><body><table><tbody><tr><td>!1!</td><td>!2!</td></tr></tbody></table></body></html>