Cách cạo câu hỏi và câu trả lời Quora bằng Python

Bình luận: 0

Bài viết này tập trung vào cách trích xuất dữ liệu Quora và lý do tại sao nó có thể hữu ích và làm thế nào Python có thể được sử dụng để tự động hóa nhiệm vụ này. Chúng tôi cũng sẽ xem xét các công cụ và thư viện chính cần thiết để cạo từ trang web này.

Tại sao phải quét dữ liệu Quora?

Quora là một trong những trang web trả lời câu hỏi phổ biến nhất mà mọi người từ khắp nơi trên thế giới sử dụng. Nó đặc biệt nổi bật ở Hoa Kỳ, Anh, Canada, Úc và các quốc gia nói tiếng Anh khác. Có rất nhiều lợi ích khi phân tích dữ liệu Quora, chẳng hạn như:

  • Cung cấp thông tin cập nhật về các chủ đề liên quan, phân tích chuyên gia và các câu hỏi về xu hướng trên các chủ đề khác nhau.
  • Tương tác thành công với đối tượng mục tiêu bằng cách giải quyết các yêu cầu của họ và tận dụng sự tin tưởng cho một danh tiếng kinh doanh hoặc chuyên gia cá nhân.
  • Đạt được câu trả lời chất lượng, chia sẻ kinh nghiệm và thông tin mà không thực hiện các tìm kiếm toàn diện.

Nền tảng có thể được sử dụng trong nghiên cứu, phát triển nội dung hoặc xây dựng các giải pháp AI.

Hiểu được trình quét web Quora

Web Scraping đề cập đến hành động trích xuất thông tin và dữ liệu từ một trang web hoặc một trang web. Đó là một cách hiện đại để thu thập rất nhiều thông tin và chuyển đổi nó thành một cấu trúc có tổ chức như tệp CSV.

Nền tảng Quora Scraping Web cung cấp cho chúng tôi:

  • bản thân câu hỏi;
  • liên kết tương ứng với một số trang quora;
  • số lượng câu trả lời và câu hỏi cho đến nay;
  • những người là tác giả của câu trả lời;
  • ngày họ được xuất bản.

Do đó, Quát dữ liệu Quora cung cấp cái nhìn sâu sắc về sự tham gia của người dùng, ý nghĩa và sự phổ biến của các câu hỏi khác nhau cũng như các câu trả lời họ nhận được.

Các công cụ thiết yếu để cạo Quora

Để sử dụng các thư viện Python dữ liệu Quora được sử dụng. Dưới đây là các tài nguyên phù hợp nhất sẽ cho phép bạn đạt được mục tiêu đó:

  • BeautifulSoup - Để phân tích các trang HTML và thu thập thông tin tìm kiếm.
  • Requests - Để xây dựng các yêu cầu giao thức chuyển siêu văn bản và nhận các trang web.
  • Selenium - Đối với tự động hóa trình duyệt, cũng như để nắm bắt nội dung được tạo động.

Các thư viện này cho phép tương tác với các trang web và thu thập thông tin từ Quora một cách dễ dàng.

Xây dựng một tập lệnh Python Quora Scraping

Tiểu mục này giải quyết việc xây dựng một cạp, sẽ là một sự chú ý từng bước. Chuẩn bị không gian làm việc, cài đặt các thư viện cần thiết, tạo các quy trình gửi yêu cầu, để phân tích mã HTML và làm việc với thông tin được truy xuất.

Bước 1: Thiết lập môi trường dự án Python của bạn

Trước để cạo một người phải chuẩn bị môi trường làm việc:

  1. Tải xuống và cài đặt Python từ trang chính thức.
  2. Thiết lập một môi trường ảo để sử dụng thư viện của bạn đang được sử dụng.
    
    python -m venv quora_scraper
    source quora_scraper/bin/activate  # Cho MacOS và Linux
    quora_scraper\Scripts\activate     # Cho Windows
    
    

Bước 2: Cài đặt thư viện Python cần thiết

Cài đặt các thư viện cần thiết mà bạn sẽ cần để quét web trong bước này:


pip install requests beautifulsoup4

Các giao diện này rất cần thiết để truyền các yêu cầu HTTP và sau đó phân tích dữ liệu HTML nhận được.

Bước 3: Gửi yêu cầu đến Quora

Để gọi một API nhất định và lấy lại trang HTML, chúng tôi sẽ sử dụng thư viện yêu cầu. Nó trực quan và hoàn thành công việc rất nhanh.


url = "https://www.quora.com/How-do-you-open-your-own-company"
response = requests.get(url)

Bước 4: Phân tích phản hồi HTML

Để sử dụng Python, để loại bỏ câu trả lời Quora, chúng ta sẽ cần một thư viện khác có tên là BeautifulSoup. Đây là cách bạn cài đặt nó:


soup = BeautifulSoup(response.text, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')

Bước 5: Trích xuất câu hỏi và câu trả lời Quora

Để trích xuất các câu hỏi và câu trả lời, bạn chỉ cần tìm thẻ HTML cần thiết có những chi tiết này. Hãy để chúng tôi đưa ra một trường hợp:


text_of_answers = []
for answer_id in range(6):
   answers = soup.find_all(
       class_=f'q-box dom_annotate_question_answer_item_{answer_id} qu-borderAll qu-borderColor--raised qu-boxShadow--small qu-mb--small qu-bg--raised')

   for answer in answers:
       text = answer.find('p', class_='q-text qu-display--block qu-wordBreak--break-word qu-textAlign--start')
       text_of_answers.append(text)

Bước 6: Xử lý giao diện cho nhiều trang

Quora có xu hướng có nhiều câu trả lời và thường bạn cần cuộn trang rất nhiều để xem mọi thứ. Đối với điều này, chúng tôi sẽ sử dụng Selenium để tự động hóa trang web.

Dưới đây là cách bạn thiết lập Selenium và sử dụng proxy để ẩn danh tính của bạn tốt hơn:


from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')

chrome_options.add_argument("--headless")

driver = wiredriver.Chrome(options=chrome_options)

Sau khi bạn đã thiết lập mọi thứ trong Selenium, bạn chỉ cần thực hiện yêu cầu HTTP, sau đó tiếp tục cuộn xuống và nắm bắt các phần dữ liệu này:


url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')

driver.get(url)

Bước 7: Lưu trữ dữ liệu được cạo một cách hiệu quả

Khi bạn hoàn thành việc thu thập dữ liệu, bạn muốn giữ chúng theo cách giúp bạn dễ dàng phân tích sau này. Cách tốt nhất để làm điều này là giữ chúng ở định dạng JSON, vì nó được sử dụng rộng rãi nhất.


with open(f'quora_data.json', 'w', encoding='utf-8') as json_file:
   json.dump(text_of_answers, json_file, ensure_ascii=False, indent=4)

Bước 8: Xuất dữ liệu sang định dạng CSV hoặc JSON

Chúng tôi đã lưu dữ liệu vào JSON, nhưng trong một số trường hợp, có thể mong muốn thực hiện nó ở nhiều định dạng cùng một lúc. Vì vậy, ở đây bạn có một chức năng thực hiện chính xác điều đó:


def export_data(data, csv_filename="quora_data.csv", json_filename="quora_data.json"):
    save_to_csv(data, csv_filename)
    save_to_json(data, json_filename)

export_data(text_of_answers)

Bước 9: Giới hạn tỷ lệ xử lý và các vấn đề chặn

Quora có một số phòng thủ chống lại việc quét dữ liệu tự động, vì vậy cố gắng gửi nhiều yêu cầu đến Quora sẽ dẫn đến việc cắt đứt địa chỉ IP của bạn. Có những cách xung quanh điều này mặc dù.

  1. Thêm một chút thời gian trước khi gửi yêu cầu tiếp theo.

    Đây là sự bắt chước cơ bản của hành vi của con người thêm một số dạng độ trễ khi một yêu cầu được gửi.

    
    import time
    import random
    
    def random_delay():
        time.sleep(random.uniform(2, 5))
    
    

    Thêm chức năng này sau mỗi truy vấn để tăng cơ hội không bị chặn.

  2. Sử dụng máy chủ proxy.

    Người ta có thể dễ dàng tránh chặn địa chỉ IP bằng cách sử dụng các máy chủ proxy. Hãy để xem cách nó có thể được sử dụng với các Requests và Selenium.

    • requests:
      
      url = "https://www.quora.com/How-do-you-open-your-own-company" 
      
      
      
      proxy = 'LOGIN:PASSWORD@ADDRESS:PORT'
      proxies = {
         "http": f"http://{proxy}",
         "https": f"https://{proxy}",
      }
      
      response = requests.get(url, proxies=proxies)
      
      
    • Selenium:
      
      proxy_address = ""
      proxy_username = ""
      proxy_password = ""
      
      chrome_options = Options()
      chrome_options.add_argument(f'--proxy-server={proxy_address}')
      chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
      
      chrome_options.add_argument("--headless")
      
      driver = wiredriver.Chrome(options=chrome_options)
      
      

Bước 10: Đặt mọi thứ lại với nhau

Vì vậy, sau khi bạn đã đề cập đến tất cả các bước, đã đến lúc kết hợp chúng và đưa chúng vào một kịch bản.


import json
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from bs4 import BeautifulSoup

proxy_address = ""
proxy_username = ""
proxy_password = ""

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')

chrome_options.add_argument("--headless")

driver = wiredriver.Chrome(options=chrome_options)

url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')

driver.get(url)

html = driver.page_source

soup = BeautifulSoup(html, "lxml")

question = soup.find(class_='q-box qu-userSelect--text')

# Câu trả lời
text_of_answers = [{'question': question}]
for answer_id in range(6):
   answers = soup.find_all(
       class_=f'q-box dom_annotate_question_answer_item_{answer_id} qu-borderAll qu-borderColor--raised qu-boxShadow--small qu-mb--small qu-bg--raised')

   for answer in answers:
       text = answer.find('p', class_='q-text qu-display--block qu-wordBreak--break-word qu-textAlign--start').text
       text_of_answers.append({
           'answers': text,
       })

with open(f'Quora_data.json', 'w', encoding='utf-8') as json_file:
   json.dump(text_of_answers, json_file, ensure_ascii=False, indent=4)
   print(f"Quora_data.json")

Phần kết luận

Trong bài viết này, chúng tôi đã thảo luận về các phương pháp Quora Scraping với Python. Các tập lệnh như vậy được xây dựng cho phép người dùng ghi đè một số hạn chế cùng với phân trang và lưu dữ liệu ở các định dạng khác nhau như JSON và CSV.

Để thu thập dữ liệu quy mô lớn, phương pháp hiệu quả nhất sẽ là sử dụng API Quora. Mặt khác, nếu bạn chọn một cách chiến lược để sử dụng BeautifulSoup hoặc Selenium, thì việc sử dụng các máy chủ proxy là điều bắt buộc để thực hiện duy trì.

Bình luận:

0 Bình luận