Python Kullanarak Quora Soruları ve Cevapları Nasıl Kazınır?

Yorumlar: 0

Bu makale, Quora verilerinin nasıl çıkarılacağına ve neden yararlı olabileceğine ve Python'un bu görevi otomatikleştirmek için nasıl kullanılabileceğine odaklanmaktadır. Ayrıca bu siteden veri kazımak için gereken ana araçları ve kütüphaneleri de inceleyeceğiz.

Quora Verilerini Neden Kazıyalım?

Quora, dünyanın dört bir yanından insanların kullandığı en popüler soru-cevap sitelerinden biridir. Özellikle ABD, İngiltere, Kanada, Avustralya ve diğer İngilizce konuşulan ülkelerde öne çıkmaktadır. Quora verilerini analiz etmenin sayısız faydası vardır, örneğin:

  • Çeşitli konularda ilgili konular, uzman analizleri ve trend sorular hakkında güncel bilgiler sağlamak.
  • Hedef kitlelerin sorularını yanıtlayarak ve bir işletme veya kişisel uzman itibarı için güvenden yararlanarak onlarla başarılı bir şekilde etkileşim kurmak.
  • Bütünsel kapsamlı aramalar yapmadan kaliteli cevaplar almak, deneyim ve bilgi paylaşımı.

Platform araştırma, içerik geliştirme veya yapay zeka çözümleri oluşturmada kullanılabilir.

Quora Web Kazımayı Anlama

Web kazıma, bir web sitesinden veya bir web sayfasından bilgi ve veri çıkarma eylemini ifade eder. Çok fazla bilgi toplamanın ve bunları CSV dosyası gibi organize bir yapıya dönüştürmenin modern bir yoludur.

Web kazıma nedir Quora platformu bize verir:

  • sorunun kendisi;
  • bazı quora sayfalarına karşılık gelen bağlantılar;
  • şu ana kadar verilen cevap ve soru sayısı;
  • cevapları yazan kişiler;
  • yayınlandıkları tarihler.

Bu nedenle, Quora veri kazıma, kullanıcı katılımı, önemi ve farklı soruların popülerliğinin yanı sıra aldıkları yanıtlar hakkında fikir verir.

Quora'yı Kazımak için Temel Araçlar

Quora verilerini kazımak için Python kütüphaneleri kullanılır. Aşağıda, bu hedefe ulaşmanızı sağlayacak en uygun kaynaklar yer almaktadır:

  • BeautifulSoup - HTML sayfalarını ayrıştırmak ve aranan bilgileri toplamak için.
  • Requests - Hypertext Transfer Protocol isteklerini formüle etmek ve web sayfalarını almak için.
  • Selenium - tarayıcı otomasyonunun yanı sıra dinamik olarak oluşturulan içeriğin yakalanması için.

Bu kütüphaneler, web sayfalarıyla etkileşime girmeyi ve Quora'dan zahmetsizce bilgi toplamayı mümkün kılar.

Quora Kazıma Python Komut Dosyası Oluşturma

Bu alt bölümde bir kazıyıcı oluşturulması ele alınmaktadır ve bu adım adım gerçekleştirilecektir. Çalışma alanını hazırlayın, gerekli kütüphaneleri kurun, istek göndermek, html kodunu ayrıştırmak ve alınan bilgilerle çalışmak için prosedürler oluşturun.

Adım 1: Python Proje Ortamınızı Kurma

Kazıma işleminden önce çalışma ortamı hazırlanmalıdır:

  1. Python'u resmi sayfasından indirin ve yükleyin.
  2. Kullanımdaki kütüphanelerinizi bölümlere ayırmak için sanal bir ortam kurun.
    
    python -m venv quora_scraper
    source quora_scraper/bin/activate  # MacOS ve Linux için
    quora_scraper\Scripts\activate     # Windows için
    
    

Adım 2: Gerekli Python Kütüphanelerinin Kurulması

Bu adımda web kazıma için ihtiyaç duyacağınız gerekli kütüphaneleri yükleyin:


pip install requests beautifulsoup4

Bu arayüzler HTTP isteklerinin iletilmesi ve ardından alınan HTML verilerinin analiz edilmesi için gereklidir.

Adım 3: Quora'ya İstek Gönderme

Belirli bir API'yi çağırmak ve HTML sayfasını geri almak için Requests kütüphanesini kullanacağız. Sezgiseldir ve işi çok hızlı halleder.


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

Adım 4: HTML Yanıtının Ayrıştırılması

Quora cevaplarını kazımak için Python kullanmak için BeautifulSoup adlı başka bir kütüphaneye ihtiyacımız olacak. Bu şekilde yükleyebilirsiniz:


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

Adım 5: Quora Sorularını ve Yanıtlarını Çıkarma

Soruları ve yanıtları çıkarmak için, yalnızca bu ayrıntıları içeren gerekli HTML etiketini bulmanız gerekir. Bir örnek verelim:


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)

Adım 6: Birden Fazla Sayfa için Sayfalandırma İşlemi

Quora'da çok fazla cevap olma eğilimindedir ve genellikle her şeyi görmek için sayfayı çok fazla kaydırmanız gerekir. Bunun için web sitesini otomatikleştirmek için Selenium kullanacağız.

Kimliğinizi daha iyi gizlemek için Selenium'u nasıl kuracağınız ve proxy'leri nasıl kullanacağınız aşağıda açıklanmıştır:


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)

Selenium'da her şeyi ayarladıktan sonra, sadece bir HTTP isteği yapmanız ve ardından aşağı kaydırmaya ve bu veri parçalarını yakalamaya devam etmeniz gerekir:


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

driver.get(url)

Adım 7: Kazınan Verilerin Verimli Bir Şekilde Depolanması

Verileri toplamayı tamamladığınızda, bunları daha sonra analiz etmeyi kolaylaştıracak şekilde saklamak istersiniz. Bunu yapmanın en iyi yolu, en yaygın olarak kullanılan JSON formatında tutmaktır.


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)

Adım 8: Verileri CSV veya JSON Formatına Aktarma

Verileri JSON'a kaydettik, ancak bazı durumlarda bunu aynı anda birden fazla formatta yapmak istenebilir. İşte burada tam olarak bunu yapan bir fonksiyon var:


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)

Adım 9: Hız Sınırları ve Engelleme Sorunlarının Ele Alınması

Quora'nın otomatik veri kazımaya karşı bazı savunmaları vardır, bu nedenle Quora'ya çok sayıda istek göndermeye çalışmak IP adresinizin kesilmesine neden olacaktır. Yine de bunu aşmanın yolları vardır.

  1. Bir sonraki isteği göndermeden önce biraz zaman ekleme.

    Bu, bir istek gönderildiğinde bir tür gecikme ekleyen insan davranışının temel taklididir.

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

    Engellenmeme şansını artırmak için her sorgudan sonra bu işlevi ekleyin.

  2. Proxy sunucuları kullanın.

    Proxy sunucuları kullanarak IP adresinin engellenmesini kolayca önleyebilirsiniz. Requests ve Selenium ile nasıl kullanılabileceğini görelim.

    • 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)
      
      

Adım 10: Her Şeyi Bir Araya Getirmek

Tüm adımları tamamladıktan sonra, bunları birleştirmenin ve tek bir komut dosyasına koymanın zamanı geldi.


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')

# Cevaplar
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")

Sonuç

Bu yazıda Python ile Quora kazıma yöntemlerini ele aldık. Oluşturulan bu tür komut dosyaları, kullanıcıların sayfalandırma ve JSON ve CSV gibi çeşitli formatlarda veri kaydetme ile birlikte bazı kısıtlamaları geçersiz kılmalarını sağlar.

Büyük ölçekli veri toplama için en etkili yöntem Quora'nın API'sini kullanmak olacaktır. Öte yandan, stratejik olarak BeautifulSoup veya Selenium kullanmayı seçerseniz, proxy sunucuları kullanmak sürdürülebilir performans için bir zorunluluktur.

Yorumlar:

0 yorumlar