2017-12-30 21 views
0

기계적인 브라우저를 사용하여 정보를 검색하고 있습니다. 결과가없는 경우 검색 양식에서, 내 코드는 다음tr/table/td가 있는지 확인하는 방법

내 코드가 작동하지 않습니다

list_src =["keyword1","gdfgz", "keyword2"] 
i = 0 
while (i < 2): 
     br2 = mechanize.Browser() 
     br2.set_cookiejar(cj) 
     br2.open("https://url") 
     br2.select_form(nr=0) # this is the search form 
     br2.form['sq'] = liste_src[i] 
     res2 = br2.submit() 
     html2 = res2.read() 
     soup = BeautifulSoup(html2, 'lxml') 
     table1 = soup.findAll("table",{ "width" : "100%" })[13] 
     tr1 = table1.findAll('tr')[3] 
     table2 = tr1.findAll("table",{ "width" : "100%" })[0] 
     tr2 = table2.findAll('tr')[1] 

내 오류 메시지 :

tr2 = table2.findAll('tr')[1] IndexError: list index out of range

결과가없는, 이게 아니야. 그래서 tr이 아닌 경우 을 추가하려고 시도했지만 '결과가 없습니다'라고 인쇄해도 작동하지 않습니다. 어떻게 문제를 해결할 수 있습니까?

+0

'시도 ... 캐치 IndexError가 : ...이' – zvadym

+1

@zvadym는 당신이 시도'의미합니까 .... except' ? –

+0

@ Code-Apprentice right, thanks :) – zvadym

답변

1

tr2 (또는 다른 목록)의 길이를 확인한 다음 목록 길이에 따라 모든 요소를 ​​반복 할 수 있습니다. 또는 색인 < 길이 인 경우 목록의 특정 색인에 액세스하십시오.

idx = 1 
tab2trs = table2.findAll('tr') 
tr2 = None 
if idx < len(tab2trs): 
    tr2 = tab2trs[idx] 

아니면 제외하고 시도를 추가 할 수 있습니다 ..

try: 
    tr2=table2.findAll('tr')[1] 
except IndexError: 
    pass 
+0

'if' 문을 논리 제어에 사용하면 예외. –

+0

@ Code-Apprentice 왜 그런가요? 이 경우에는 거기에있을 것으로 예상됩니다. 그렇지 않은 경우에는 필요에 따라 다른 곳에서 처리 할 수있는 예외입니다 ... 길이 검사로 코드를 자르지 않아도됩니다 ... –