2015-07-19 272 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

相关问题