보통은 루프 안에서 필요한 데이터를 모두 가져오지만,
가끔은 루프 바깥에 있는 데이터를 함께 추출해야 할 때가 있습니다.
이번 예시에서는 Amazon 베스트셀러 페이지를 이용해 설명해볼게요. 아래 이미지와 같이 각 상품의 정보를 추출하면서 동시에 해당 카테고리 이름도 함께 가져오려 합니다.
상품 정보를 반복 추출하기 위해 “상품”만을 위한 루프를 만들면 카테고리 정보는 루프 바깥에 있게 됩니다. 이때는 "카테고리를 위한 루프를 하나 더 만들면 되지 않을까?" 라고 생각할 수 있지만, Octoparse에서는 두 개의 루프가 겹치는 구조를 허용하지 않습니다. 별도의 루프를 만들면 두 루프 간의 데이터 연결도 불가능하죠.
이게 딜레마인가요? 그럼 어떻게 해야 할까요?
사실 방법은 간단합니다!
상품 루프의 XPath를 기준(축, Axis) 으로 삼고, 그 기준을 이용해 상대 XPath로 카테고리 데이터를 지정하면 됩니다.
이해가 잘 되지 않으신다면 아래 단계별 설명을 참고해 주세요.
먼저 상품에 대한 루프를 만듭니다.
HTML 소스 코드에서 상품의 XPath를 확인합니다:
상품의 XPath는 다음과 같습니다: //li[@class="a-carousel-card"]
이 XPath를 축(Axis)으로 사용하여 카테고리 데이터를 가져옵니다: //li[@class="a-carousel-card"]/ancestor::div[@class="a-row a-carousel-controls a-carousel-row a-carousel-has-buttons"]/preceding-sibling::div[@class="a-row a-carousel-header-row a-size-large"]//h2
상품 XPath를 루프 아이템의 매칭 XPath(즉, 축)으로 설정했기 때문에,
상품 데이터 필드의 XPath는 빈칸으로 두고,
카테고리 데이터 필드의 XPath는 축 이후의 부분만 입력하면 됩니다.
결과 데이터는 아래와 같이 표시됩니다: