어두운 proxyscrape 로고

파이썬을 사용하여 레딧을 스크랩하는 방법

방법, Python, 스크래핑, Nov-02-20225분 읽기

목차

사람들은 Facebook, Reddit, Twitter 등 여러 소스에서 정보를 쉽게 수집하고 스크랩할 수 있습니다. 스크래퍼는 웹 페이지에서 데이터를 정확하고 빠르게 추출하는 특수 도구로 생각할 수 있습니다. 스크래핑 API는 스크래퍼가 웹사이트의 안티 스크래핑 기술에 의해 금지되는 것을 피할 수 있도록 도와줍니다. 그러나 직접 관리하는 프록시 도구에 비해 API를 사용하는 데는 비용이 많이 듭니다.

Reddit을 사용해 보셨나요? 소셜 리서처로서 온라인에서 많은 시간을 보낸다면 Reddit에 대해 들어보셨을 가능성이 높습니다. Reddit은 스스로를 "인터넷의 첫 페이지"라고 홍보합니다. 사람들이 콘텐츠와 뉴스를 공유하거나 다른 사람의 게시물에 댓글을 달 수 있는 온라인 토론 포럼입니다. 따라서 인터넷 마케터와 소셜 리서처에게는 놀라운 데이터 소스입니다. 

Reddit에는 데이터를 크롤링하기 위한 Python Reddit API Wrapper(줄여서 PRAW)라는 API가 있습니다. 이 블로그에서는 파이썬을 사용하여 Reddit을 스크랩하는 방법을 단계별로 보여드리겠습니다. 하지만 그 전에 Reddit을 스크랩해야 하는 이유를 알아야 합니다.

레딧을 스크랩해야 하는 이유는 무엇인가요?

Reddit의 디자인에 대해 이야기하면 "서브 레딧"으로 알려진 여러 커뮤니티로 나뉩니다. 인터넷에서 관심 있는 주제의 하위 레딧을 찾을 수 있습니다. 소셜 연구원들은 특정 주제에 대한 Reddit 토론을 추출하여 분석을 실행하고 추론하며 실행 가능한 계획을 구현합니다. 

Reddit에서 다음과 같은 많은 데이터 포인트를 스크랩할 수 있습니다:

  • 링크
  • 댓글
  • 이미지
  • 하위 리딧 목록
  • 각 하위 레딧에 대한 제출물
  • 사용자 이름
  • 업보팅
  • 다운투표

다음과 같은 필요에 따라 Reddit에서 비즈니스와 관련된 모든 정보를 스크랩할 수 있습니다:

  • NLP 애플리케이션을 구축하려면
  • 고객 감정 추적하기
  • 시장 동향을 파악하려면
  • 소비자 조사
  • 마케팅 캠페인의 효과를 모니터링하려면

예를 들어 

  • 패션 브랜드는 패션 하위 레딧의 모든 댓글 텍스트, 제목, 링크, 이미지, 캡션을 스크랩해야 합니다:
    • 올바른 가격 책정 전략 수립
    • 색상 트렌드 파악
    • 다양한 브랜드와 함께 패셔니스타의 고충을 발견하다
  • 저널리즘 및 뉴스 플레이어는 자동 텍스트 요약 기능을 위해 머신러닝 알고리즘을 학습시키기 위해 블로그 링크가 포함된 작성자 게시물을 스크랩해야 합니다.
  • 투자 및 트레이딩 회사는 '주식 시장' 관련 하위 레딧을 스크랩하여 어떤 종목이 논의되고 있는지 해석하여 투자 계획을 수립해야 합니다.

레딧 스크래핑의 과제

Reddit 스크래핑은 웹 스크레이퍼(컴퓨터 프로그램)를 사용하여 Reddit 웹사이트에서 공개적으로 사용 가능한 데이터를 추출합니다. 공식 Reddit API를 사용할 때 직면할 수밖에 없는 제한 때문에 Reddit 스크레이퍼를 사용해야 합니다. 그러나 Reddit API를 사용하지 않는 웹 스크레이퍼를 사용하여 Reddit에서 데이터를 추출하는 경우 Reddit 이용 약관을 위반하게 됩니다. 하지만 웹 스크래핑이 불법이라는 의미는 아닙니다.

문제 없이 스크래핑 세션을 진행하려면 Reddit에서 마련한 스크래핑 방지 시스템을 피해야 합니다. Reddit에서 사용하는 가장 일반적인 스크래핑 방지 기술은 다음과 같습니다:

  • IP 추적
  • 캡차

프록시 및 IP 로테이션의 도움으로 IP 추적 문제를 해결할 수 있습니다. 반면에 2Captcha와 같은 캡차 솔루션을 사용하여 캡차 문제를 해결할 수 있습니다.

파이썬을 사용하여 레딧을 스크랩하는 방법

Reddit을 스크랩하는 방법에는 다섯 가지가 있습니다:

  • 수동 스크래핑 - 가장 쉽지만 속도와 비용 측면에서 가장 효율적이지 않은 방법입니다. 하지만 일관성이 높은 데이터를 얻을 수 있습니다.
  • Reddit API 사용 - Reddit API를 사용하여 Reddit을 스크랩하려면 기본적인 코딩 기술이 필요합니다. 데이터를 제공하지만 Reddit 스레드의 게시물 수는 1,000개로 제한됩니다.
  • 슈가 코팅된 타사 API - 효과적이고 확장 가능한 접근 방식이지만 비용 효율적이지 않습니다.
  • 웹 스크래핑 도구 - 이 도구는 확장 가능하며 마우스 사용에 대한 기본적인 노하우만 있으면 됩니다.
  • 사용자 지정 스크래핑 스크립트 - 사용자 지정 및 확장성이 뛰어나지만 높은 수준의 프로그래밍 능력이 필요합니다.

다음 단계를 통해 Reddit API를 사용하여 Reddit을 스크랩하는 방법을 알아봅시다.

Reddit API 계정 만들기

계속 진행하려면 먼저 Reddit 계정을 만들어야 합니다. PRAW를 사용하려면 링크를 따라 Reddit API에 등록해야 합니다.

패키지 및 모듈 가져오기

먼저 아래와 같이 Pandas 기본 제공 모듈, 즉 날짜 시간과 두 개의 타사 모듈인 PRAW 및 Pandas를 가져옵니다:

import praw
pandas를 pd로가져옵니다.
날짜 시간가져 오기

Reddit 및 하위 Reddit 인스턴스 가져오기

파이썬 레딧 API 래퍼의 약자인 Praw를 사용하여 레딧 데이터에 액세스할 수 있습니다. 먼저 praw.Reddit 함수를 호출하고 변수에 저장하여 Reddit에 연결해야 합니다. 그런 다음 다음 인수를 함수에 전달해야 합니다.

reddit = praw.Reddit(client_id='PERSONAL_USE_SCRIPT_14_CHARS', \.
                    client_secret='SECRET_KEY_27_CHARS ', \.
                    user_agent='YOUR_APP_NAME', \.
                    username='YOUR_REDDIT_USER_NAME', \.
                    password='YOUR_REDDIT_LOGIN_PASSWORD')
이제 원하는 하위 레딧을 가져올 수 있습니다. 따라서 reddit(변수)에서 .subreddit 인스턴스를 호출하고 액세스하려는 하위 레딧의 이름을 전달합니다. 예를 들어, r/Nootropics 하위 레딧을 사용할 수 있습니다.
subreddit = reddit.subreddit('Nootropics')

스레드에 액세스

각 하위 레딧에는 레디터들이 만든 주제를 정리하는 다섯 가지 방법이 있습니다:

  • .new
  • .hot
  • .논란의 여지가 있는
  • .gilded
  • .top

가장 많이 투표한 토픽을 다음과 같이 표시할 수 있습니다:

top_subreddit = subreddit.top()

r/Nootropics에서 상위 100개의 제출물이 있는 목록과 같은 객체를 얻을 수 있습니다. 그러나 Reddit의 요청 제한은 1000개이므로 .top에 제한을 as로 전달하여 샘플 크기를 제어할 수 있습니다:

top_subreddit = subreddit.top(limit=600)

데이터 구문 분석 및 다운로드

원하는 모든 데이터를 스크랩할 수 있습니다. 하지만 아래 주제에 대한 정보는 스크랩할 것입니다:

  • id
  • title
  • 점수
  • 생성 날짜
  • 본문 텍스트

데이터를 사전에 저장한 다음 아래와 같이 for 루프를 사용하여 이를 수행합니다.

topics_dict = { "title":[], \
                "score":[], \
                "id":[], "url":[], \
                "created": [], \
                "body":[]}

이제 Reddit API에서 데이터를 스크랩할 수 있습니다. top_subreddit 객체를 반복하여 정보를 사전에 추가할 것입니다.

top_subreddit에 제출합니다:
    topics_dict["id"].append(submission.id)
    topics_dict["title"].append(submission.title)
    topics_dict["score"].append(submission.score)
    topics_dict["created"].append(submission.created)
    topics_dict["body"].append(submission.selftext)

이제 파이썬 사전은 읽기 쉽지 않기 때문에 데이터를 판다스 데이터프레임에 넣었습니다.

topics_data = pd.DataFrame(topics_dict)

CSV 내보내기

판다에서는 다양한 형식의 데이터 파일을 매우 쉽게 만들 수 있으므로 다음 코드 줄을 사용하여 데이터를 CSV 파일로 내보냅니다.

topics_data.to_csv('FILENAME.csv', index=False)

2021년 최고의 Reddit 프록시

Reddit은 프록시 사용 제한과 관련하여 엄격한 웹사이트가 아니라는 것을 알고 계실 것입니다. 하지만 프록시를 사용하지 않고 Reddit에서 작업을 자동화하는 경우 적발되어 불이익을 받을 수 있습니다. 

이제 두 가지 범주에 속하는 Reddit용 최고의 프록시 몇 가지를 살펴보겠습니다:

거주지 프록시 - 인터넷 서비스 제공업체(ISP)가 특정 물리적 위치의 디바이스에 할당하는 IP 주소입니다. 이러한 프록시는 사용자가 웹사이트에 로그인할 때 사용하는 디바이스의 실제 위치를 알려줍니다.
데이터센터 프록시 - 인터넷 서비스 제공업체에서 유래하지 않은 다양한 IP 주소입니다. 당사는 클라우드 서비스 제공업체로부터 이를 획득합니다.

다음은 Reddit에서 가장 인기 있는 주거용 및 데이터센터용 프록시입니다.

스마트 프록시

스마트프록시는 레딧 자동화에 효과적인 최고의 프리미엄 주거용 프록시 제공업체 중 하나입니다. 광범위한 IP 풀을 보유하고 있으며 서비스에 가입하면 모든 IP에 액세스할 수 있습니다. 

Storm프록시

가격 및 무제한 대역폭을 고려할 때 Stormproxies는 좋은 선택입니다. 가격도 저렴하고 사용 비용도 저렴합니다. 다양한 사용 사례를 위한 프록시가 있으며 Reddit 자동화를 위한 최고의 주거용 프록시를 제공합니다.

ProxyScrape

ProxyScrape 는 스크래핑용 프록시 제공에 중점을 둔 인기 있는 프록시 서비스 제공업체 중 하나입니다. 또한 공유 데이터센터 프록시와 함께 전용 데이터센터 프록시도 제공합니다. 인터넷 웹사이트의 데이터를 스크랩하는 데 사용할 수 있는 4만 개 이상의 데이터센터 프록시를 보유하고 있습니다.

ProxyScrape 는 사용자에게 세 가지 유형의 서비스를 제공합니다, 

하이프록시

하이프록시는 Reddit과 함께 작동하며 다음과 같은 범주의 프록시가 있습니다:
  • 공유 프록시
  • 비공개 프록시
  • 기밀 사이트 프록시
  • 발권 프록시
  • 미디어 프록시

인스턴트 프록시

또한 매우 안전하고 안정적이며 빠르며 가동 시간이 약 99.9%에 달하는 인스턴트프록시를 Reddit 자동화에 사용할 수 있습니다. 모든 데이터센터 프록시 중 가장 저렴합니다.

Reddit 프록시를 사용하는 이유는 무엇인가요?

Reddit에서 일부 자동 도구로 작업할 때는 프록시가 필요합니다. Reddit은 자동 작업을 쉽게 감지하고 사용자의 IP가 플랫폼에 액세스하는 것을 차단하는 매우 민감한 웹사이트이기 때문입니다. 따라서 투표, 게시물 작성, 그룹 가입/탈퇴, 둘 이상의 계정 관리와 같은 일부 작업을 자동화하는 경우 나쁜 결과를 피하려면 반드시 프록시를 사용해야 합니다.

Reddit 스크래핑을 위한 대체 솔루션

Reddit 스크래핑 요구 사항이 적은 경우 수동 스크래핑을 사용할 수 있습니다. 그러나 요구 사항이 커지면 웹 스크래핑 도구 및 사용자 정의 스크립트와 같은 자동화된 스크래핑 방법론을 활용해야 합니다. 웹 스크래퍼는 일일 스크래핑 요구 사항이 수백만 개 이내인 경우 비용 및 리소스 효율성이 입증되었습니다.

따라서 대량의 Reddit 데이터를 스크랩하는 최고의 솔루션으로 최고의 Reddit 스크레이퍼 몇 가지를 살펴 보겠습니다.

스크래프트롬

스크랩스톰은 레딧을 스크랩할 때 매우 훌륭하게 작동하는 시중에 나와 있는 최고의 스크랩 도구 중 하나입니다. 이 도구는 인공 지능을 사용하여 웹 페이지의 주요 데이터 포인트를 자동으로 식별합니다.

Apify의 레딧 스크레이퍼

Apify의 Reddit 스크레이퍼를 사용하면 Reddit API를 사용하지 않고도 데이터를 쉽게 추출할 수 있습니다. 즉, 상업적 용도로 데이터를 다운로드하기 위해 개발자 API 토큰과 Reddit의 승인이 필요하지 않습니다. 또한 Apify 플랫폼의 통합 프록시 서비스를 사용하여 스크래핑을 최적화할 수도 있습니다. 

결론

Reddit 데이터를 스크랩하는 5가지 방법에 대해 설명했는데, 가장 쉬운 방법은 기본적인 코딩 기술만 있으면 되는 Reddit API를 사용하는 것입니다. PRAW는 깔끔한 Python 인터페이스로 Reddit API를 사용할 수 있게 해주는 Reddit API용 Python 래퍼입니다. 그러나 대규모 Reddit 스크래핑 요구 사항이 있는 경우 Reddit 스크레이퍼를 사용하여 Reddit 웹사이트에서 공개적으로 사용 가능한 데이터를 추출할 수 있습니다. Reddit 웹사이트에서 작업을 자동화하려면 데이터 센터 또는 주거용 프록시를 사용해야 합니다.