2015-07-22 104 views
1

以下是代碼和示例結果,我只想要表格的第一列忽略其餘部分。請幫忙。有關於Stackoverflow的類似問題,但他們沒有幫助。如何從BeautifulSoup(Python)中的表格獲取第一個子表格行

<tr> 
<td>JOHNSON</td> 
<td> 2,014,470 </td> 
<td>0.81</td> 
<td>2</td> 
</tr> 


I want JOHNSON only, as it is the first child. 
My python code is : 

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() 
What I get: 
SMITH 2,501,922 1.0061 
JOHNSON 2,014,470 0.812 
+0

您的問題沒有完全搞清楚。如果你爲每個tr得到第一個孩子td,你需要第一個*列*而不是第一個*行*。你能澄清嗎? –

+0

編輯。它確實是專欄 – PankajKushwaha

回答

2

你可以找到所有的tr標籤與find_all,然後爲每個trfind(只給人的第一)td。如果它存在,你打印:

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

謝謝,你能解釋一下嗎?我的意思是如果我只需要迭代第二或第三行呢? – PankajKushwaha

+0

@PankajKushwaha:完成 –

1

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>, ...] 

相關文章:

相關問題