없는 자료에 대한 크롤링 처리

조회수 378회

안녕하세요.
파이썬을 시작하는 초보 직장인입니다.

논문 저널에 대해 웹 크롤링을 하고 있습니다.
사용하는 패키지는 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 답변

  • 좋아요

    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에 정의해둔 모든 항목에 대해서, 크롤링 데이터 안에 그게 있었건 없었건, 뭔가 일을 했을 것입니다.
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)