2015-06-22 53 views
1

如何使用python从HTML中删除“表”?如何从这种情况下删除<table>结构与python?

我有情况是这样的:

paragraph = ''' 
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem molestiae consequuntur officiis corporis sint.<br /><br /> 
<table> 
<tr> 
<td> 
    text title 
</td> 
<td> 
    text title 2 
</td> 
</tr> 
</table> 
<p> lorem ipsum</p> 
''' 

如何删除与表结构的内容如上面使用Python? 我希望生成为输出如下:

paragraph = ''' 
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem molestiae consequuntur officiis corporis sint.<br /><br /> 
<p> lorem ipsum</p> 
''' 
+1

你能发布你试过的代码吗? – Vaulstein

+0

它会始终以

开头,并以
结尾,您可以使用正则表达式 – The6thSense

回答

0

这是复杂的使用正则表达式,一个笨方法,我建议:

def remove_table(s): 
    left_index = s.find('<table>') 
    if -1 == left_index: 
     return s 
    right_index = s.find('</table>', left_index) 
    return s[:left_index] + remove_table(s[right_index + 8:]) 

可能有结果里面的一些空行。

+0

感谢您的回答,我试着你的源代码正在工作。根据我的情况你的答案。 –

6

您可以使用BeautifulSoup尤其PageElement.extract()

In [16]: from bs4 import BeautifulSoup 

In [17]: soup = BeautifulSoup("""<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem molestiae consequuntur officiis corporis sint.<br /><br /> 
    ....: <table> 
    ....: <tr> 
    ....: <td> 
    ....:  text title or some 
    ....: </td> 
    ....: </tr> 
    ....: </table> 
    ....: <p> lorem ipsum</p>""") 

In [18]: _ = soup.table.extract() 

In [19]: soup 
Out[19]: 
<html><body><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem molestiae consequuntur officiis corporis sint.<br/><br/> 
</p> 
<p> lorem ipsum</p></body></html> 
+0

感谢您的答案,但我正在寻找一个解决方案,而不使用模块。也许用正则表达式或其他方法。 但你的答案将是我的替代能力。 –

+0

@AriPrihantoro你不想使用'regex'为什么?因为它会[爆炸你的头](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454) – styvane

+0

我寻找另一种方法,而不是使用BeautifulSoup或其他模块。 我更喜欢使用正则表达式等方法。你可能误解了我的观点。 –

0

您也可以尝试这种基本的字符串格式化

paragraph = paragraph[:paragraph.find('<table>')] +  # Find the starting letter of '<table>' 
      paragraph[paragraph.find('</table>')+  # Find the starting letter of </table> 
      (len('<\table>')+1):]      # Add 1 because length starts from zero 

print(paragraph) 

即使这个工作用于基本文本提取

+0

是的,我会问这样的。 –

+0

你会有很多

吗? – Bharadwaj

+0

不是他的表的数量,如果从我这里如果表的列数超过1个。 –

相关问题