메인 콘텐츠로 건너뛰기

루프 아이템 밖의 데이터를 가져오기 위해 상대 XPath 활용하기

오늘 업데이트함

보통은 루프 안에서 필요한 데이터를 모두 가져오지만,
가끔은 루프 바깥에 있는 데이터를 함께 추출해야 할 때가 있습니다.

이번 예시에서는 Amazon 베스트셀러 페이지를 이용해 설명해볼게요. 아래 이미지와 같이 각 상품의 정보를 추출하면서 동시에 해당 카테고리 이름도 함께 가져오려 합니다.

categoryandproduct.jpg

상품 정보를 반복 추출하기 위해 “상품”만을 위한 루프를 만들면 카테고리 정보는 루프 바깥에 있게 됩니다. 이때는 "카테고리를 위한 루프를 하나 더 만들면 되지 않을까?" 라고 생각할 수 있지만, Octoparse에서는 두 개의 루프가 겹치는 구조를 허용하지 않습니다. 별도의 루프를 만들면 두 루프 간의 데이터 연결도 불가능하죠.

이게 딜레마인가요? 그럼 어떻게 해야 할까요?

사실 방법은 간단합니다!

상품 루프의 XPath를 기준(축, Axis) 으로 삼고, 그 기준을 이용해 상대 XPath로 카테고리 데이터를 지정하면 됩니다.

mceclip5.png

이해가 잘 되지 않으신다면 아래 단계별 설명을 참고해 주세요.

먼저 상품에 대한 루프를 만듭니다.

mceclip2.png

HTML 소스 코드에서 상품의 XPath를 확인합니다:

mceclip3.png

상품의 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는 축 이후의 부분만 입력하면 됩니다.

mceclip6.png

결과 데이터는 아래와 같이 표시됩니다:

mceclip7.png
답변이 도움되었나요?