작성
·
358
0
이렇게 코딩을 하고 실행을 했는데 다음과 같이 에러가납니다.. 어느정도 크롤링이 되다가 중간에 에러가나네요 ㅠ
jupyter notebook을 restart 하고 다시실행하면 하기의 내용처럼 또 다른 내용의 에러가 발생합니다 ㅠ
리스트범위에 관련된 에러같은데.. class='best-list' 부분을 수정해보고 실행해 봐도 크롤링되다가 도중에 에러가 나면서 크롤링이 멈춰버립니다 어떻하면 좋을까요 ㅠ
혹시 이부분에 대해 조언가능하시면 부탁드리겠습니다.
답변 4
1
안녕하세요.
테스트에 시간이 많이 걸려서, 저도 테스트를 해봤는데, 테스트동안 에러는 나지 않았습니다. 한참 후에, 특별히 만들어진 서브카테고리 페이지에서 에러가 날수도 있겠다는 생각은 드는데요.
굉장히 많은 페이지를 크롤링하다보니, 특정 서브카테고리의 경우, 이벤트 페이지와 같이 완전히 다른 형태의 웹페이지들이 있을 수 있고, 이 때는 해당 페이지에서 아이템 정보를 가져올 수 없기 때문에, 에러가 날 수도 있겠다라는 생각이 듭니다.
보여주신 에러 메세지가 전부라면, 아이템 정보 리스트를 가져오는 부분에서, 완전히 다른 형태의 웹페이지인 경우, 리스트를 못가져오는 것이고, 이렇게 완전히 다른 페이지라면, 아이템 정보가 없을 수도 있고, 특별한 형태라서 가져올 필요가 없을 수도 있으니까요.
가볍게 다음과 같이 해당 아이템 리스트가 있으면, 각 아이템 정보를 가져오도록 바꿔줘도 해결되지 않을까 생각합니다.
def get_items(html, category_name, sub_category_name):
# 일부 서브 카테고리의 경우, 이벤트 페이지와 같이 표시될 수 있으므로, 해당 케이스들은 skip 함 (2020.09.30)
best_item = html.select('div.best-list')
if len(best_item[1].select('li')) > 0:
for index, item in enumerate(best_item[1].select('li')):
이 부분에 대해, 해당 코드를 업데이트해서, 다음 챕터에 넣어놓았습니다.
[실전] 크롤링과 데이터베이스 - 스키마 설계해보기
주피터 노트북 다음 코드에 넣어놓았으니, 한번 확인 부탁드립니다.
이슈가 있다면, 새로운 질문으로 올려주시면 다시 확인해보겠습니다. (댓글형태로는 확인할 수가 없어서요)
감사합니다.
0
저도 테스트 2시간 걸려서 해보니, 잘 되었습니다. try except 도 좋은 방법입니다. 그리고 이 케이스에서는 근본적인 해결방법으로 사용될 수 있습니다. 왜냐하면, 아마 코드에 각 크롤링 웹페이지 주소를 출력하게 해놓으셨다면, 에러가 났을 때, 해당 페이지를 한번 눈으로 확인해보실 수 있으실텐데, 그러면 완전 다른 이벤트 페이지이거나, 아예 다른 웹사이트(3rt party)를 보여줘서, 이런 페이지는 내가 원하는 데이터는 아니구나 라는 것을 아실 수 있고, 이 부분을 try except 로 하든, 제가 업데이트한 코드처럼 조건문을 사용하든, 상관없습니다.
감사합니다.
0
강사님 안녕하세요~
자세하고 친절한 답변 감사합니다 ㅠ
가려켜주신대로 돌려보니 오류가 발생하지 않고 크롤링이 잘 되었습니다. 정말 감사드립니다!!
남은강의도 열심히 듣겠습니다!
0
안녕하세요~
결국 이것저것 하다가 잘안되서 try except 예외처리로 오류 회피를 하니 크롤링이 마지막까지 되었습니다
근본적인 해결방법이 아닌거같지만 일단 진도를 나갈수있을거같아요~ ㅠ