Cách cạo Reddit bằng Python

Làm thế nào để, Python, Cạo, Nov-15-20225 phút đọc

Mọi người có thể dễ dàng thu thập và thu thập thông tin từ nhiều nguồn như Facebook, Reddit và Twitter. Bạn có thể nghĩ về một scraper như một công cụ chuyên dụng để trích xuất dữ liệu từ một trang web một cách chính xác và nhanh chóng. Các API scraping giúp scrapers tránh bị cấm bởi các kỹ thuật chống scraping mà các trang web đặt. Tuy nhiên, đó là

Mục lục

Mọi người có thể dễ dàng thu thập và thu thập thông tin từ nhiều nguồn như Facebook, Reddit và Twitter. Bạn có thể nghĩ về một scraper như một công cụ chuyên dụng để trích xuất dữ liệu từ một trang web một cách chính xác và nhanh chóng. Các API scraping giúp scrapers tránh bị cấm bởi các kỹ thuật chống scraping mà các trang web đặt. Tuy nhiên, việc sử dụng API rất tốn kém so với một công cụ proxy do chính bạn quản lý.

Bạn đã sử dụng Reddit chưa? Nếu bạn là một nhà nghiên cứu xã hội và dành nhiều thời gian trực tuyến, rất có thể bạn đã nghe nói về Reddit. Reddit tự quảng cáo là "trang nhất của Internet". Đây là một diễn đàn thảo luận trực tuyến, nơi mọi người chia sẻ nội dung và tin tức hoặc nhận xét về bài đăng của người khác. Vì vậy, nó là một nguồn dữ liệu đáng kinh ngạc cho các nhà tiếp thị Internet và các nhà nghiên cứu xã hội. 

Reddit có một API được gọi là Python Reddit API Wrapper, được rút ngắn cho PRAW, để thu thập dữ liệu. Trong blog này, tôi sẽ chỉ cho bạn các bước về cách cạo Reddit bằng python. Nhưng trước đó, bạn cần biết lý do tại sao bạn phải cạo Reddit.

Tại sao bạn cần phải Scrape Reddit?

Nếu chúng ta nói về thiết kế của Reddit, thì nó được chia thành nhiều cộng đồng được gọi là "subreddits". Bạn có thể tìm thấy bất kỳ subreddit nào về chủ đề bạn quan tâm trên Internet. Các nhà nghiên cứu xã hội chạy phân tích, đưa ra suy luận và thực hiện các kế hoạch hành động khi họ trích xuất các cuộc thảo luận trên Reddit cho một chủ đề cụ thể. 

Bạn có thể cạo rất nhiều điểm dữ liệu từ Reddit, chẳng hạn như:

  • Liên kết
  • Ý kiến
  • Hình ảnh
  • Danh sách các subreddits
  • Gửi cho mỗi subreddit
  • Tên đăng nhập
  • Lượt ủng hộ
  • Downvote

Bạn có thể lấy bất kỳ thông tin nào từ Reddit có liên quan đến doanh nghiệp của mình vì những nhu cầu sau:

  • Để xây dựng các ứng dụng NLP
  • Để theo dõi cảm xúc của khách hàng
  • Luôn dẫn đầu xu hướng thị trường
  • Đối với nghiên cứu người tiêu dùng
  • Để theo dõi tác động của các chiến dịch tiếp thị của bạn

Chẳng hạn 

  • Một thương hiệu thời trang cần cạo tất cả các văn bản nhận xét, tiêu đề, liên kết, hình ảnh và chú thích trong các subreddits thời trang cho: Đưa ra chiến lược giá phù hợpXác định xu hướng màu sắcKhám phá những điểm đau của các tín đồ thời trang với các thương hiệu khác nhau
  • Đưa ra chiến lược giá phù hợp
  • Xác định xu hướng màu sắc
  • Khám phá những điểm đau của các tín đồ thời trang với nhiều thương hiệu khác nhau
  • Báo chí và người chơi tin tức phải cạo các bài đăng của tác giả với các liên kết blog để đào tạo các thuật toán học máy để tóm tắt văn bản tự động.
  • Các công ty đầu tư và giao dịch phải loại bỏ các subreddits liên quan đến "thị trường chứng khoán" để đưa ra kế hoạch đầu tư bằng cách diễn giải cổ phiếu nào đang được thảo luận.

Những thách thức của việc cạo Reddit

Reddit scraping sử dụng web scraper (chương trình máy tính) để trích xuất dữ liệu có sẵn công khai từ trang web Reddit. Bạn cần sử dụng các trình cạo Reddit vì những hạn chế bạn phải đối mặt khi sử dụng API Reddit chính thức. Tuy nhiên, nếu bạn sử dụng trình quét web không sử dụng API Reddit để trích xuất dữ liệu từ Reddit, bạn sẽ vi phạm các điều khoản sử dụng Reddit. Nhưng điều đó không có nghĩa là web scraping là bất hợp pháp.

Để có một phiên cạo không gặp trở ngại, bạn sẽ phải trốn tránh các hệ thống chống cạo do Reddit đưa ra. Các kỹ thuật chống cạo phổ biến nhất được Reddit sử dụng là:

  • Theo dõi IP
  • Captcha

Bạn có thể giải quyết vấn đề theo dõi IP với sự trợ giúp của proxy và xoay vòng IP. Mặt khác, bạn có thể giải quyết vấn đề Captcha bằng cách sử dụng các giải Captcha như 2Captcha.

Cách cạo Reddit bằng Python

Có năm cách để cạo Reddit, và đó là:

  • Cạo thủ công - Đây là phương pháp dễ nhất nhưng kém hiệu quả nhất về tốc độ và chi phí. Tuy nhiên, nó mang lại dữ liệu với tính nhất quán cao.
  • Sử dụng API Reddit - Bạn cần các kỹ năng mã hóa cơ bản để quét Reddit bằng API Reddit. Nó cung cấp dữ liệu nhưng giới hạn số lượng bài đăng trong bất kỳ chủ đề Reddit nào ở mức 1000.
  • API của bên thứ ba bọc đường - Đây là một cách tiếp cận hiệu quả và có thể mở rộng, nhưng nó không tiết kiệm chi phí.
  • Công cụ quét web - Những công cụ này có thể mở rộng và chỉ yêu cầu bí quyết cơ bản là sử dụng chuột.
  • Các tập lệnh cạo tùy chỉnh - Chúng có khả năng tùy biến và mở rộng cao nhưng yêu cầu tầm cỡ lập trình cao.

Hãy xem cách chúng ta có thể quét Reddit bằng API Reddit với sự trợ giúp của các bước sau.

Tạo tài khoản Reddit API

Bạn cần tạo một tài khoản Reddit trước khi tiếp tục. Để sử dụng PRAW, bạn phải đăng ký API Reddit bằng cách nhấp vào liên kết này .

Nhập gói và mô-đun

Đầu tiên, chúng tôi sẽ nhập các mô-đun tích hợp sẵn của Pandas, tức là ngày giờ và hai mô-đun của bên thứ ba, PRAW và Pandas, như hình dưới đây:

nhập khẩu nguyên liệu
Nhập khẩu gấu trúc dưới dạng PD
Nhập datetime dưới dạng DT

Tải các phiên bản Reddit và subreddit

Bạn có thể truy cập dữ liệu Reddit bằng Praw, viết tắt của Python Reddit API Wrapper. Đầu tiên, bạn cần kết nối với Reddit bằng cách gọi tôm. Reddit hàm và lưu trữ nó trong một biến. Sau đó, bạn phải truyền các đối số sau vào hàm.

Reddit = tôm. Reddit(client_id='PERSONAL_USE_SCRIPT_14_CHARS', \
                     client_secret='SECRET_KEY_27_CHARS ', \
                     user_agent='YOUR_APP_NAME', \
                     username='YOUR_REDDIT_USER_NAME', \
                     mật khẩu = 'YOUR_REDDIT_LOGIN_PASSWORD')

Bây giờ, bạn có thể nhận được subreddit của sự lựa chọn của bạn. Vì vậy, hãy gọi phiên bản .subreddit từ reddit (biến) và chuyển tên của subreddit bạn muốn truy cập. Ví dụ: bạn có thể sử dụng subreddit r / Nootropics.

subreddit = reddit.subreddit ('Nootropics')

Truy cập các chủ đề

Mỗi subreddit có năm cách khác nhau dưới đây để tổ chức các chủ đề được tạo bởi Redditors:

  • .mới
  • .nóng
  • .Tranh cãi
  • .Gilded
  • .đỉnh

Bạn có thể lấy các chủ đề được bình chọn nhiều nhất như:

top_subreddit = subreddit.top()

Bạn sẽ nhận được một đối tượng giống như danh sách có 100 bài nộp hàng đầu trong r / Nootropics. Tuy nhiên, giới hạn yêu cầu của Reddit là 1000, vì vậy bạn có thể kiểm soát kích thước mẫu bằng cách chuyển giới hạn đến .top như:

top_subreddit = subreddit.top(giới hạn = 600)

Phân tích cú pháp và tải xuống dữ liệu

Bạn có thể cạo bất kỳ dữ liệu nào bạn muốn. Tuy nhiên, chúng tôi sẽ thu thập thông tin dưới đây về các chủ đề:

  • Id
  • tiêu đề
  • điểm
  • Ngày tạo
  • nội dung văn bản

Chúng tôi sẽ làm điều này bằng cách lưu trữ dữ liệu của chúng tôi trong một từ điển và sau đó sử dụng một vòng lặp for như hình dưới đây.

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

Bây giờ, chúng ta có thể cạo dữ liệu từ API Reddit. Chúng tôi sẽ thêm thông tin vào từ điển của chúng tôi bằng cách lặp qua đối tượng top_subreddit của chúng tôi.

Đối với bài dự thi 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)

Bây giờ, chúng tôi đưa dữ liệu của mình vào Pandas Dataframes vì từ điển Python không dễ đọc.

topics_data = PD. Khung dữ liệu(topics_dict)

Xuất CSV

Rất dễ dàng để tạo các tệp dữ liệu ở nhiều định dạng khác nhau trong Pandas, vì vậy chúng tôi sử dụng các dòng mã sau để xuất dữ liệu của mình sang tệp CSV.

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

Proxy Reddit tốt nhất năm 2021

Bạn biết rằng Reddit không phải là một trang web nghiêm ngặt khi nói đến các hạn chế sử dụng proxy. Nhưng bạn có thể bị bắt và bị phạt nếu bạn tự động hóa hành động của mình trên Reddit mà không sử dụng proxy. 

Vì vậy, hãy xem xét một số proxy tốt nhất cho Reddit thuộc hai loại:

Proxy dân cư - Đây là những địa chỉ IP mà Nhà cung cấp dịch vụ Internet (ISP) gán cho một thiết bị ở một vị trí thực tế cụ thể. Các proxy này tiết lộ vị trí thực tế của thiết bị mà người dùng sử dụng để đăng nhập vào một trang web.

Proxy trung tâm dữ liệu - Đây là những địa chỉ IP khác nhau không bắt nguồn từ bất kỳ Nhà cung cấp dịch vụ Internet nào. Chúng tôi mua chúng từ một nhà cung cấp dịch vụ đám mây.

Sau đây là một số proxy dân cư và trung tâm dữ liệu hàng đầu cho Reddit.

Proxy thông minh

Smartproxy là một trong những nhà cung cấp proxy dân cư cao cấp hàng đầu vì nó có hiệu quả cho tự động hóa Reddit. Nó có một nhóm IP rộng lớn và cung cấp quyền truy cập vào tất cả các IP khi bạn đăng ký dịch vụ của nó. 

Bão tố

Giá cả và băng thông không giới hạn của Stormproxy khiến chúng trở thành một lựa chọn tốt. Chúng có giá cả phải chăng và giá rẻ để sử dụng. Họ có proxy cho các trường hợp sử dụng khác nhau và cung cấp proxy dân cư tốt nhất để tự động hóa Reddit.

ProxyScrape

ProxyScrape là một trong những nhà cung cấp dịch vụ proxy phổ biến tập trung vào việc cung cấp proxy để cạo. Nó cũng cung cấp proxy trung tâm dữ liệu chuyên dụng cùng với các proxy trung tâm dữ liệu được chia sẻ. Nó có hơn 40k proxy trung tâm dữ liệu mà bạn có thể sử dụng để thu thập dữ liệu từ các trang web trên Internet.

ProxyScrape cung cấp ba loại dịch vụ cho người dùng, tức là, 

Proxy cao

Highproxy hoạt động với Reddit và có các loại proxy sau:

  • Proxy được chia sẻ
  • Proxy riêng
  • Các trang web được phân loại proxy
  • Proxy tạo yêu cầu
  • Proxy truyền thông

Instantproxy

Bạn cũng có thể sử dụng Instantproxy để tự động hóa Reddit vì chúng rất an toàn, đáng tin cậy, nhanh chóng và có thời gian hoạt động khoảng 99,9%. Chúng là rẻ nhất trong tất cả các proxy trung tâm dữ liệu.

Tại sao nên sử dụng proxy Reddit?

Bạn cần proxy khi bạn đang làm việc với một số công cụ tự động trên Reddit. Đó là bởi vì Reddit là một trang web rất nhạy cảm, dễ dàng phát hiện các hành động tự động và chặn IP của bạn truy cập vào nền tảng.  Vì vậy, nếu bạn đang tự động hóa một số tác vụ như phiếu bầu, bài đăng, tham gia / hủy tham gia nhóm và quản lý nhiều tài khoản, bạn chắc chắn cần sử dụng proxy để tránh kết quả xấu.

Các giải pháp thay thế cho Scrape Reddit

Bạn có thể cạo thủ công nếu yêu cầu cạo Reddit của bạn nhỏ. Nhưng nếu các yêu cầu trở nên lớn, bạn phải tận dụng các phương pháp cạo tự động như công cụ quét web và tập lệnh tùy chỉnh. Các trình quét web chứng minh là hiệu quả về chi phí và tài nguyên khi yêu cầu cạo hàng ngày của bạn nằm trong vòng vài triệu bài đăng.

Vì vậy, hãy xem xét một số công cụ quét Reddit tốt nhất là giải pháp tốt nhất để thu thập một lượng lớn dữ liệu Reddit.

Phế liệu

Scrapestorm là một trong những công cụ cạo tốt nhất hiện có trên thị trường vì nó hoạt động khá tuyệt vời khi cạo Reddit. Nó sử dụng trí tuệ nhân tạo để tự động xác định các điểm dữ liệu chính trên trang web.

Công cụ cạo Reddit của Apify

Trình quét Reddit của Apify giúp bạn dễ dàng trích xuất dữ liệu mà không cần sử dụng API Reddit. Điều đó có nghĩa là bạn không cần mã thông báo API dành cho nhà phát triển và ủy quyền từ Reddit để tải xuống dữ liệu cho mục đích thương mại. Bạn cũng có thể tối ưu hóa việc cạo của mình bằng cách sử dụng dịch vụ proxy tích hợp của nền tảng Apify. 

Kết thúc

Chúng tôi đã thảo luận về năm cách để thu thập dữ liệu Reddit và cách dễ nhất là sử dụng API Reddit vì nó chỉ yêu cầu các kỹ năng mã hóa cơ bản. PRAW là một trình bao bọc Python cho API Reddit cho phép bạn sử dụng API Reddit với giao diện Python sạch sẽ. Nhưng khi bạn có yêu cầu cạo Reddit lớn, bạn có thể trích xuất dữ liệu có sẵn công khai từ trang web Reddit với sự trợ giúp của các trình quét Reddit. Để tự động hóa các hành động của bạn trên trang web Reddit, bạn cần sử dụng trung tâm dữ liệu hoặc proxy dân cư.