如何从 BeautifulSoup ( Python ) 中的表中获取第一个子表行
Posted
技术标签:
【中文标题】如何从 BeautifulSoup ( Python ) 中的表中获取第一个子表行【英文标题】:How to get first child table row from a table in BeautifulSoup ( Python ) 【发布时间】:2015-10-11 19:56:38 【问题描述】:这是代码和示例结果,我只希望表格的第一列忽略其余部分。 *** 上有类似的问题,但没有帮助。
<tr>
<td>JOHNSON</td>
<td> 2,014,470 </td>
<td>0.81</td>
<td>2</td>
</tr>
我只想要 JOHNSON,因为它是第一个孩子。 我的python代码是:
import requests
from bs4 import BeautifulSoup
def find_raw():
url = 'http://names.mongabay.com/most_common_surnames.htm'
r = requests.get(url)
html = r.content
soup = BeautifulSoup(html)
for n in soup.find_all('tr'):
print n.text
find_raw()
我得到了什么:
SMITH 2,501,922 1.0061
JOHNSON 2,014,470 0.812
【问题讨论】:
您的问题并不完全清楚。如果你得到每个 tr 的第一个子 td,你想要第一个 column 而不是第一个 row。你能澄清一下吗? 已编辑。确实是专栏 【参考方案1】:遍历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>, ...]
相关帖子:
Is there a clean way to get the n-th column of an html table using BeautifulSoup? Extracting selected columns from a table using BeautifulSoup CSS select with beautifulsoup4 doesn't work Python BeautifulSoup Getting a column from table - IndexError List index out of range BeautifulSoup Specify table column by number?【讨论】:
【参考方案2】:您可以找到所有带有find_all
的tr
标签,然后对于每个tr
你find
(只给出第一个)td
。如果存在,则打印它:
for tr in soup.find_all('tr'):
td = tr.find('td')
if td:
print td
【讨论】:
谢谢,你能解释一下吗?我的意思是如果我只需要迭代第二行或第三行怎么办?以上是关于如何从 BeautifulSoup ( Python ) 中的表中获取第一个子表行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 BeautifulSoup 从 HTML 中去除评论标签?
如何使用 BeautifulSoup 从网站中获取所有标题?