2015-07-19 273 views
0

我試圖以編程方式從本網站中刪除所有表格數據 http://www.virginiaequestrian.com/main.cfm?action=greenpages&GPType=8如何獲取BeautifulSoup中選定行的表格數據

理想情況下,這將逐行進行。例如,我可以說抓住每一行的所有表格數據,然後有能力跳過特定的行。

from bs4 import BeautifulSoup 
import requests 

r=requests.get('http://www.virginiaequestrian.com/main.cfm?action=greenpages&GPType=8') 
soup=BeautifulSoup(r.content,'lxml') 

data = [] 
info = {} 
DataGrid=soup.find('table') 
for tr in DataGrid.find_all('tr')[1:]: 
    for td in tr.find_all('td')[0]: 
      info['Name']=td 
    for td in tr.find_all('td')[1]: 
      info['City']=td 
    for td in tr.find_all('td')[2]: 
      td=td.strip().replace(',','') 
      info['Phone']=td 
    for td in tr.find_all('td')[3]: 
      info['more']=td 
      data.append(info) 

我試過切片,雖然它似乎在TR級別上工作,一旦我做循環要求它找到所有每一行的表中的數據,我只能拿回值的整個列表。

+2

實際上'Datagrid'是什麼? –

+0

它應該是湯的相關選擇。 – user3590113

回答

0

頁面中有多個表格。如果你全部檢查它們,你會發現你想要的數據是第三個。所以代碼可能是:

from bs4 import BeautifulSoup 
import requests 

r=requests.get('http://www.virginiaequestrian.com/main.cfm?action=greenpages&GPType=8') 
soup=BeautifulSoup(r.content) 

tbl = soup.findAll('table')[2] 
for tr in tbl.findAll('tr'): 
    for td in tr.findAll('td'): 
     if td.p: 
      print td.p.string 
+0

如果我想通過只調用第一行的數據來測試這個,該怎麼辦?對於tr in tbl.findAll('tr')[1]:使其中斷 – user3590113

+1

@ user3590113:首先,索引爲1的元素不是第一個,應該使用0作爲索引。其次,'tbl.findAll('tr')[0]'返回一個元素,而不是一個列表,所以你不能在'for'中使用它。你可以使用'tbl.findAll('tr')[0:1]'有一個只有第一個元素的列表(可迭代)。 –

+0

如何返回選定的行?讓我們想要在第三個真正的行中顯示所有的值? – user3590113

相關問題