如何在BeautifulSoup(Python)中从表中获取第一个子表行

如何在BeautifulSoup(Python)中从表中获取第一个子表行,python,beautifulsoup,python-requests,Python,Beautifulsoup,Python Requests,这是代码和示例结果,我只希望表的第一列忽略其余列。在Stackoverflow上也有类似的问题,但它们没有帮助 <tr> <td>JOHNSON</td> <td> 2,014,470 </td> <td>0.81</td> <td>2</td> </tr> 我得到的是: SMITH 2,501,922 1.0061 JOHNSON 2,014,470 0.812 您可以使

这是代码和示例结果,我只希望表的第一列忽略其余列。在Stackoverflow上也有类似的问题,但它们没有帮助

<tr>
<td>JOHNSON</td>
<td> 2,014,470 </td>
<td>0.81</td>
<td>2</td>
</tr>
我得到的是:

SMITH 2,501,922 1.0061
JOHNSON 2,014,470 0.812

您可以使用
find_all
找到所有
tr
标记,然后对每个
tr
进行
find
(仅给出第一个)
td
。如果存在,则打印它:

for tr in soup.find_all('tr'):
    td = tr.find('td')
    if td:
        print td

Iter通过tr,然后打印第一个td的文本:

for tr in bs4.BeautifulSoup(data).select('tr'):
    try:
        print tr.select('td')[0].text
    except:
        pass
或更短:

>>> [tr.td for tr in bs4.BeautifulSoup(data).select('tr') if tr.td]
[<td>SMITH</td>, <td>JOHNSON</td>, <td>WILLIAMS</td>, <td>JONES</td>, ...]
>>[tr.td表示bs4.BeautifulSoup(数据)中的tr。如果tr.td,则选择('tr')]
[史密斯、约翰逊、威廉姆斯、琼斯等]
相关职位:


谢谢,您能解释一下吗?我的意思是,如果我只需要迭代第二行或第三行怎么办?你的问题并不完全清楚。如果您得到每个tr的第一个子td,那么您想要的是第一列而不是第一行。你能澄清一下吗?编辑。的确是这个专栏
>>> [tr.td for tr in bs4.BeautifulSoup(data).select('tr') if tr.td]
[<td>SMITH</td>, <td>JOHNSON</td>, <td>WILLIAMS</td>, <td>JONES</td>, ...]