2017-07-04 87 views
0

我有这段代码,我可以在Python 2.7的网站上搜索名为“ctable”的所有表。但是我想停止它,当它到达这个值为XXXX的“ctable”时。我需要这个值XXXX。所以如果它找到这个文本我想停止网页浏览这些表。当我找到值时,如何停止网页抓取数据?

可能吗?

这里我的代码:

soup = BeautifulSoup(x, 'lxml') 
 

 
datatable=[] 
 
for ctable in soup.find_all('table', "ctable")[:-1]: 
 
    for record in ctable.find_all('tr'): 
 
     temp_data = [] 
 
     for data in record.find_all('td'): 
 
      temp_data.append(data.text.encode('latin-1')) 
 
     datatable.append(temp_data)

我尝试这样做:

datatable=[] 
 
for ctable in soup.find_all('table', "ctable")[:-1]: 
 
    for record in ctable.find_all('tr'): 
 
     temp_data = [] 
 
     for data in record.find_all('td'): 
 
      temp_data.append(data.text.encode('latin-1')) 
 
      if 'modul' in data.text: 
 
       break   
 
datatable.append(temp_data)

+0

请给从真正链接,你刮数据,我可以检查它在我的电脑上 –

+0

大家可以去私人? – tardos93

+0

是的,我们走吧,但我不知道如何切换到聊天=) –

回答

2

在代码中实现一个break操作:

... 
    (your code above) 
datatable=[] 
stop = 0 
for ctable in soup.find_all('table', "ctable")[:-1]: 
    if stop == 1: 
     break 
    for record in ctable.find_all('tr'): 
     if stop == 1: 
      break 
     temp_data = [] 
     for data in record.find_all('td'): 
      temp_data.append(data.text.encode('latin-1')) 
      if 'modul' in data.text: 
       stop = 1 
       break   
     datatable.append(temp_data) 

我没有给予足够的重视,你有一个三重for循环。也许现在它会工作?

我将break添加到每个循环。

替代ifbreak

datatable=[] 
stop = 0 
for ctable in soup.find_all('table', "ctable")[:-1]: 
    for record in ctable.find_all('tr'): 
     temp_data = [] 
     for data in record.find_all('td'): 
      temp_data.append(data.text.encode('latin-1')) 
      if 'modul' in data.text: 
       stop = 1 
       break   
     datatable.append(temp_data) 
     if stop == 1: 
      break 
    if stop == 1: 
     break 
+0

这在我的代码中并不重要:[:-1] 它不工作,你的代码中有一些语法错误 – tardos93

+0

你可以在这里复制它吗? –

+0

无效的语法错误,并且红色“=” – tardos93