【问题标题】:How to add multiple td tags before a tr tag in BeautifulSoup如何在 BeautifulSoup 中的 tr 标签之前添加多个 td 标签
【发布时间】:2021-01-11 03:31:11
【问题描述】:

我正在尝试在 tr 标签中添加多个 td 标签,我已经尝试使用 insert_before 方法进行此操作

for table in data:
    rows = table.find_all('tr')
    for row in rows:
        if(len(row) < 11):
            tag = soup.new_tag('td')
            for i in range(8):
                row.insert_before(tag)

在这之后什么都没有发生。我也试过了

for table in data:
    rows = table.find_all('tr')
    for row in rows:
        if(len(row) < 11):
            tag = soup.new_tag('td')
            for i in range(8):
                soup.row.insert_before(tag)

如果我这样做,我会收到一个错误 'NoneType' object has no attribute 'insert_before'

我想在前面加上这些 td 标签。我试过 append 方法,效果很好

for table in data:
    rows = table.find_all('tr')
    for row in rows:
        if(len(row) < 11):
            tag = soup.new_tag('td')
            for i in range(8):
                row.append(tag)

但是 td 标签是在末尾添加的,而不是在开头。我想添加这些空的 td 标签,这样它可以帮助我正确解析表格,而不会在某些行之间丢失标签。

编辑1: 这是我得到的结果

<table>
<tr>
<td>1</td><td>2</td><td>3</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
</tr>
</table>

我期待的结果是

<table>
<tr>
<td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>1</td><td>2</td><td>3</td>
</tr>
</table>

【问题讨论】:

    标签: python dataframe web-scraping beautifulsoup


    【解决方案1】:

    您可以使用此示例如何在&lt;tr&gt; 中添加&lt;td&gt; 标签:

    from bs4 import BeautifulSoup
    
    txt = '''
    <table>
    <tr>
    <td>1</td><td>2</td><td>3</td>
    </tr>
    </table>
    '''
    
    soup = BeautifulSoup(txt, 'html.parser')
    
    print(soup)
    print('-' * 80)
    
    for table in soup.find_all('table'):
        rows = table.find_all('tr')
        for row in rows:
            if len(row) < 11:
                for i in range(8):
                    row.insert(-1, soup.new_tag('td'))
    print(soup)
    

    打印:

    <table>
    <tr>
    <td>1</td><td>2</td><td>3</td>
    </tr>
    </table>
    
    --------------------------------------------------------------------------------
    
    <table>
    <tr>
    <td>1</td><td>2</td><td>3</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td>
    </tr>
    </table>
    

    【讨论】:

    • 嗨@Andrej Kesely,谢谢你的回复,我可以使用append方法在最后添加td标签,正如我在上面的问题中提到的那样。我想要那些标签在一开始。像这样&lt;table&gt; &lt;tr&gt; &lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; 我可以使用 insert 方法吗?
    • @Srikar 你可以使用row.insert(0, soup.new_tag('td')) 代替-1
    • 非常感谢,它成功了。 row.insert(0, soup.new_tag('td')) 使用 0 而不是 -1 解决了这个问题。
    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多