없는 자료에 대한 크롤링 처리
조회수 380회
안녕하세요.
파이썬을 시작하는 초보 직장인입니다.
논문 저널에 대해 웹 크롤링을 하고 있습니다.
사용하는 패키지는 selenium, BeautifulSoup4 정도가 될 것 같습니다.
저널에서 논문 페이지에 대해
제목은 항상 같은 위치에 있어서,
driver.find_element_by_class_name("c-article-title").text
와 같은 형식으로 불러올 수 있었으나
Received, Revised, Accepted, Published, Issue Date, DOI에
대한 항목들은
c-article-subject-list
라는 동일한 클래스에 속해있어
driver.find_elements_by_class_name("c-bibliographic-information__value")[0].text
와 같이 순서에 따라 데이터를 스크래핑했습니다.
문제는 어떤 논문들은 수정 등 일부 항목이 존재하지 않는다는 것입니다.
Received(0), Revised(1), Accepted(2), Published(3), Issue Date(4), DOI(5)가
어떤 논문에서는 Received(0), Accepted(1), Published(2), Issue Date(3), DOI(4)가 되기도 합니다.
심지어는 Published(0), DOI(1) 인 경우도 있습니다.
반복문을 사용해서 스크래핑을 진행하다보니, 이러한 차이에서
오류를 발생시키는 것을 확인했습니다.
구글에 해당 내용을 검색해보긴 했으나, 실력이 부족하여 제대로 찾지 못하고 이렇게 문의 드리게 되었습니다.
위와 같이 클래스명이 동일하고 때에 따라 유동적으로 변하는 경우, 어떻게 제가 원하는 자료를 스크래핑할 수 있을까요?
1 0
1 답변
-
# 만약 그렇다면 실제로 순회해야 하는 것은 "존재 가능한 모든 항목"이어야 합니다. attributes = ['Received', 'Revised', 'Accepted', ..., 'DOI'] # 각 항목별로: for a in attributes : for e in driver.find_elements_by_class_name("c-bibliographic-information__value") : if a in e.text : # 그 항목이 있을 때 할 일과 else : # 없을 때 할 일을 정해주면 # 위 루프 통과 후에는, attributes에 정의해둔 모든 항목에 대해서, 크롤링 데이터 안에 그게 있었건 없었건, 뭔가 일을 했을 것입니다.
댓글 입력