代码之家  ›  专栏  ›  技术社区  ›  Ninja2k

我怎样才能选择美组的每一个孩子?

  •  2
  • Ninja2k  · 技术社区  · 7 年前

    在我下面的表格中,我把项目1-4擦掉,并将它们存储在一个名为headings的变量中。

    我还想选择值1-4并将其存储在一个名为columns的变量中,是否仍要每秒选择一次。有点像

    columns = boxinfo.find_all("td").nthChild(2)
    

    我正在从中删除的表结构

    <div class="box1">
    
    <table class="table1">
    
    <tr><td class="label">Item1</td><td>Value1</td></tr>
    
    <tr><td class="label">Item2</td><td>Value2</td></tr>
    
    <tr><td class="label">Item3</td><td>Value3</td></tr>
    
    <tr><td class="label">Item4</td><td>Value4</td></tr>
    
    </table>
    
    </div>
    

    代码

    #Find our information
    boxinfo = soup.find("div", {"id": "box1"})
    headings = boxinfo.find_all("td", {"class": "label"})
    columns = boxinfo.find_all("td").nthChild(2) #This does not work :(
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Martin Evans    7 年前

    如果您试图提取所有值,那么您可以让beautifulsoup返回所有项,然后python可以筛选您想要的值。例如:

    from bs4 import BeautifulSoup
    
    html = """<div class="box1">
    <table class="table1">
    <tr><td class="label">Item1</td><td>Value1</td></tr>
    <tr><td class="label">Item2</td><td>Value2</td></tr>
    <tr><td class="label">Item3</td><td>Value3</td></tr>
    <tr><td class="label">Item4</td><td>Value4</td></tr>
    </table>
    </div>"""
    
    soup = BeautifulSoup(html, "html.parser")
    div = soup.find("div", class_="box1")
    values = []
    
    for tr in div.find_all('tr'):
        values.append(tr.find_all("td")[1].text)
    
    print(values)
    

    为您提供一个值列表:

    ['Value1', 'Value2', 'Value3', 'Value4']
    

    或者,如果要将所有数据作为列包含在列表中:

    soup = BeautifulSoup(html, "html.parser")
    div = soup.find("div", class_="box1")
    columns = []
    
    for tr in div.find_all('tr'):
        columns.append([td.text for td in tr.find_all("td")])
    
    columns = list(zip(*columns))    
    
    print(columns)
    print(columns[1])  # display the 2nd column
    

    给你:

    [('Item1', 'Item2', 'Item3', 'Item4'), ('Value1', 'Value2', 'Value3', 'Value4')]
    ('Value1', 'Value2', 'Value3', 'Value4')
    

    list(zip(*columns)) 是将行列表转换为列列表的一种方法。