2015-03-31 63 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

相關問題