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, 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:
Platform araştırma, içerik geliştirme veya yapay zeka çözümleri oluşturmada kullanılabilir.
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:
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 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:
Bu kütüphaneler, web sayfalarıyla etkileşime girmeyi ve Quora'dan zahmetsizce bilgi toplamayı mümkün kılar.
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.
Kazıma işleminden önce çalışma ortamı hazırlanmalıdır:
python -m venv quora_scraper
source quora_scraper/bin/activate # MacOS ve Linux için
quora_scraper\Scripts\activate # Windows için
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.
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)
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')
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)
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)
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)
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)
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.
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.
Proxy sunucuları kullanarak IP adresinin engellenmesini kolayca önleyebilirsiniz. Requests ve Selenium ile nasıl kullanılabileceğini görelim.
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)
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)
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")
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