당근마켓 내가 원하는 상품 전국 동네 크롤링하기

류명운

·

2025. 4. 13. 19:23

반응형

엘지 lg 광파오븐 중고 물건을 찾고 있는데. 중고나라보다 당근마켓이 더 물건이 많고 가격도 저렴한거 같다.

(아무래도 동네 판매라 판매가 용이하니 물건이 많은 것 같기도 하고.. 가격도 착하네)

 

무튼 내 주변 동네는 맘에드는 물건이 없어서 전국 동네 검색을 해보려고 한다.

당근마켓 홈페이지에서 일일히 동네선택해가며 확인이 가능하다.

근데 어떤 바보가 그걸 일일히 확인하겠냐~~!

일단 테스트용으로 챗지피티한테 특정 물건 크롤링좀하게 코드 좀 짜달랬다.

 

get 방식으로 조회하는데 파라미터 중 id 값이 동네이다. 숫자로 표현도 가능하다. 3~10561까지 동네가 존재하는 것 같다.

.cards-wrap .card-top 이 변수의 값이 true 이면 현재 판매가능한 1개 이상의 상품이 존재 (예약/판매완료는 판매불가능상태)

간단하게 당근마켓 페이지에서 크롬 개발자도구(f12)열고 console 란에 아래 코드 입력하면 자기가 일일히 페이지 다 조회해서 확인해본다.

 

(async () => {
  //검색키워드
  const keyword = encodeURIComponent('엘지 lg 광파오븐');
  //당근마켓 동네번호3~10561까지 존재
  const startId = 6010;
  const endId = 6035; 
  //결과저장
  const results = [];

  for (let id = startId; id <= endId; id++) {
    const url = `/kr/buy-sell/?in=${id}&only_on_sale=true&search=${keyword}`;
    
    try {
      const response = await fetch(url);
      const html = await response.text();
      const temp = document.createElement('html');
      temp.innerHTML = html;

  if (temp.innerHTML.indexOf('근처에') != -1) {
    console.log("- - "+id);
  } else {
    console.log("있!음 - "+id);
var site = 'https://www.daangn.com/'+url;
        results.push({ id, site});
  }

      // 서버 과부하 방지용 딜레이
      await new Promise(res => setTimeout(res, 500));
    } catch (e) {
      console.warn(`⚠️ [ID ${id}] 에러: ${e.message}`);
    }
  }

  console.log("📍 최종 검색된 동네 ID 목록:");
  console.table(results);
})();

 

6010부터 6035까지 테스트 조회해본 결과

1. 주소 링크만 클릭해서 확인할 수 있게 csv 파일로 저장해서 출력하기

2. 상품이 존재할 경우 상품 객체들 한 페이지 html안에 다 넣어서 한 눈에 보이게 가공하기

1 / 2는 알아서들 가공해서 사용하시길 ^.^

반응형