본문 바로가기

프로그래밍, 코딩

[파이썬] 웹페이지 크롤링할 때, 에러(오류)가 발생해도 계속 작동하게 하는 법

반응형

파이썬으로 일정한 시간 마다 웹페이지를 크롤링하게 만드는 프로그램을 만든 후, 백그라운드 실행을 해놓을텐데,

 

 

간혹가다 웹페이지 문제 등으로 오류가 발생할 경우, 백그라운드 프로그램이 종료되는 일이 발생한다.

 

 

백그라운드로 돌아가는 프로그램이 종료되면, 다시 프로그램을 가동시켜야 되는 귀찮음이 발생한다.

 

 

만약, 일시적으로 에러(오류)가 발생해도 프로그램이 멈추지않고 계속 돌아가게 하려면 어떻게 해야 될까?

 

 

그 때는 "try", "except"를 이용하면 된다.

 

 

"try:"의 하위 코드를 실행하다가 오류가 없으면, 아무 문제없이 넘어가고,

 

 

만약, "try:"의 하위 코드를 실행하다가 오류가 발생하면, "except:"의 하위 코드가 실행된다.

 

 

즉, 오류가 발생하더라도 프로그램이 작동을 멈추지 않고, "except:"의 하위 코드를 실행하면서 계속 작동하는 것이다.

 

 

아래는 내가 쓰는 코드의 일부인데,

 

 

"try:"의 하위 코드인 크롤링 작업 시 오류가 발생하면,

 

 

"except:"의 하위 코드인 "print('부동산 뉴스에 에러가 발생했습니다.')"를 실행시키고, 다음 작업으로 넘어간다.

 

 

즉, 크롤링 오류가 발생해도 프로그램이 종료되지 않고 계속 작동한다.

 

    for i in lis:
        date = i.find('span', class_='date').text

        if date != todayStr:
            print('오늘 기사가 아닙니다.')

        else:
            try:
                title = ''
                dts = i.find_all('dt')
                for j in dts:
                    title = title + j.text

                href = i.dt.a.attrs['href']

                if href not in check:
                    check.append(href)

                    text = '▶ ' + title + '\n\n'
                    print(text, end='')
                    f.write(text)

                    text = '- ' + i.dd.text.strip() + '\n\n'
                    print(text, end='')
                    f.write(text)

                    text = baseUrl + href + '\n\n\n'
                    print(text, end='')
                    f.write(text)

                    newsNum += 1

                else:
                    print('일치하는 기사라서 pass 합니다.')

            except:
                print('부동산 뉴스에 에러가 발생했습니다.')

 

반응형