2015-03-31 66 views
0

我正在用BeautifulSoup解析HTML文件,并被卡住了< br>标签。 我想在插入list元素后追加< br>标签,但它不起作用。 最简单的方法是什么?如何在文本元素之后附加<br>标签?

soup = BeautifulSoup(open("test.html")) 
mylist = [Item_1,Item_2] 
for i in range(len(mylist)): 
    #insert Items to the 4. column 

这是默认的HTML:

<html> 
<body> 
    <table> 
    <tr> 
    <th> 
    1. Column 
    </th> 
    <th> 
    2. Column 
    </th> 
    <th> 
    3. Column 
    </th> 
    <th> 
    4. Column 
    </th> 
    <th> 
    5. Column 
    </th> 
    <th> 
    6. Column 
    </th> 
    <th> 
    7. Column 
    </th> 
    <th> 
    8. Column 
    </th> 
    </tr> 
    <tr class="a"> 
    <td class="h"> 
    Text in first column 
    </td> 
    <td> 
    <br/> 
    </td> 
    <td> 
    <br/> 
    </td> 
    <td> 
    <!--I want to insert items here--> 
    </td> 
    <td> 
    1 
    </td> 
    <td> 
    37 
    </td> 
    <td> 
    38 
    </td> 
    <td> 
    38 
    </td> 
    </tr> 
    </table> 
</body> 
</html> 

这是我想要

<html> 
<body> 
    <table> 
    <tr> 
    <th> 
    1. Column 
    </th> 
    <th> 
    2. Column 
    </th> 
    <th> 
    3. Column 
    </th> 
    <th> 
    4. Column 
    </th> 
    <th> 
    5. Column 
    </th> 
    <th> 
    6. Column 
    </th> 
    <th> 
    7. Column 
    </th> 
    <th> 
    8. Column 
    </th> 
    </tr> 
    <tr class="a"> 
    <td class="h"> 
    Text in first column 
    </td> 
    <td> 
    <br/> 
    </td> 
    <td> 
    <br/> 
    </td> 
    <td> 
    Item_1 <br> 
    Item_2 
    </td> 
    <td> 
    1 
    </td> 
    <td> 
    37 
    </td> 
    <td> 
    38 
    </td> 
    <td> 
    38 
    </td> 
    </tr> 
    </table> 
</body> 
</html> 
+0

ü可以上传原始的HTML和HTML你想要得到什么? – 2015-03-31 15:12:55

回答

2

要追加一个标签,先用new_tag()工厂函数创建它,就像HTML所以:

soup.td.append(soup.new_tag('br')) 

考虑下面的程序。对于html中的每个表格单元格(即每个td),它会将一个<br/>标记和一些文本附加到单元格中。

from bs4 import BeautifulSoup 

html_doc = ''' 
<html> 
<body> 
    <table> 
    <tr> 
    <td> 
    data1 
    </td> 
    <td> 
    data2 
    </td> 
    </tr> 
    </table> 
</body> 
</html> 
''' 

soup = BeautifulSoup(html_doc) 
mylist = ['addendum 1', 'addendum 2'] 
for td,item in zip(soup.find_all('td'), mylist): 
    td.append(soup.new_tag('br')) 
    td.append(item) 
print soup.prettify() 

结果:

<html> 
<body> 
    <table> 
    <tr> 
    <td> 
    data1 
    <br/> 
    addendum 1 
    </td> 
    <td> 
    data2 
    <br/> 
    addendum 2 
    </td> 
    </tr> 
    </table> 
</body> 
</html> 
+0

谢谢!有效! – user3816048 2015-04-01 09:18:06

相关问题