Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

Operation : Doomsday Love

트위터 팔로워 목록 가져오기 (준비물 : 브라우저, 구글 스프레드) 본문

잡설/dev

트위터 팔로워 목록 가져오기 (준비물 : 브라우저, 구글 스프레드)

꾹꾹엑 2025. 3. 22. 23:47

주의 : 코드 이상한 거 알면 코딩 잘 하는 거니까 알아서 해라 

 

 

사실 트위터엔 API를 사용해 사용자의 팔로워 목록을 검색하고, 내보내주는 기능이 이미 있습니다.

하지만 API 2.0과 함께 유료화 됐어요.  개같은 일론 머스크.

그래서 내 팔로워 목록에서 직접 긁어오기로 합니다.

 

 


 

먼저 준비물입니다.

해당 링크로 접속해, 시트를 사본 만들기로 가져가 주세요.

https://docs.google.com/spreadsheets/d/1CsyUtlJyLVstpJXlmxyT8WVfJPs3kX1SoW2BfEj0M_g/edit?usp=sharing 

 

준비 끝.

 

 

그 다음 트위터의 팔로워 목록으로 가, 팔로워 목록을 띄워주세요.

 

 

 

f12를 눌러 개발자 도구를 띄웁니다.

Console 창이 뜬다면, 복붙을 허용하기 위해 해당 문구를 '손수' 타자로 쳐야합니다.

allow pasting

치고 엔터!

 

이제 복붙이 허용됐을 텐데, 아래의 코드를 콘솔창에 붙여넣고 엔터를 누르세요.

 

좀 개발하신 분께 : 화면에 보이는 DOM 요소를 박박 긁어오는 함수입니다.

트위터는 브라우저 성능 때문인지, 사용자가 아래로 스크롤 하면 위쪽  DOM 요소를 제거하고 아래를 새로운 요소로 추가하더라고요.

그래서 오토 스크롤을 실행하고 스크롤을 할 때마다 데이터를 누적 저장하는 코드를 쪄봤습니다.

챗 GPT가 이쁘게 정리해 줬어요.

const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));

// 팔로워 데이터 수집 및 자동 스크롤 함수
const getAllFollowers = async () => {
  const followersContainerSelector = 'div[aria-label="타임라인: 팔로워"]';
  const followerItemSelector = 'button[data-testid="UserCell"]';
  const nameSelector = 'div[dir="ltr"] > span > span';
  const usernameSelector = 'div[class="css-175oi2r"] > div > span';

  const followersContainer = document.querySelector(followersContainerSelector);
  if (!followersContainer) {
    console.error('팔로워 목록을 찾을 수 없습니다.');
    return [];
  }

  const followersMap = new Map();
  let prevHeight = 0;
  let sameHeightCount = 0;

  while (true) {
    const followerItems = document.querySelectorAll(followerItemSelector);

    followerItems.forEach(item => {
      const nameElement = item.querySelector(nameSelector);
      const usernameElement = item.querySelector(usernameSelector);

      if (usernameElement && nameElement) {
        const name = nameElement.textContent;
        const username = usernameElement.textContent;
        if (!followersMap.has(username)) {
          followersMap.set(username, { name, username });
        }
      }
    });


    window.scrollBy(0, 1000);
    await delay(500); 

    const currentHeight = document.body.scrollHeight;

    if (currentHeight === prevHeight) {
      sameHeightCount += 1;
    } else {
      sameHeightCount = 0;
      prevHeight = currentHeight;
    }

    // 높이가 3번 이상 변하지 않으면 끝으로 간주
    if (sameHeightCount >= 3) {
      break;
    }
  }

  return Array.from(followersMap.values());
};

// 메인 실행
(async () => {
  console.log('🚀 팔로워 데이터 수집을 시작합니다.');
  const followers = await getAllFollowers();
  console.log(`🎉 총 팔로워 수: ${followers.length}`);
  console.log(followers);
})();

 

창이 쭉쭉쭉쭉 내려가지며, 팔로워 목록이 수집 되고, 그 결과가 자바스크립트의 배열로 반환됩니다.

저 뚱뚱이 배열을 우클릭 한 뒤, Copy object로 복사해 주세요.

 

데이터를 아까 준비한 시트에 붙여 넣어주세요.

팔로워 목록이 좌르륵 붙여집니다.

하지만 이쁘지 않아요. 붐따입니다.

 

상단에 못보던 메뉴가 있습니다.

구글 앱스크립트를 이용한 것인데, 저 JSON 데이터들을 이쁘고롬 정리해줄 녀석입니다.

 

바이러스 아닙니다. 믿어주세요...

최초 실행시 경고 문구가 뜹니다만, 요 놈을 허용해 주셔야 실행이 됩니다.

 

짠.

시트 이름까지 바뀌며, 팔로워 수집 완료.

 

이제 이쁘게 꾸미시든 뭐든 하세요.

쫑!

 

'잡설 > dev' 카테고리의 다른 글

[PC전용] 미리 깐 뱃지 페어틀  (0) 2025.03.30