Questo articolo si concentra su come estrarre i dati di Quora e perché potrebbero essere utili, e su come Python può essere utilizzato per automatizzare questo compito. Analizzeremo anche i principali strumenti e librerie necessari per effettuare lo scrape da questo sito.
Quora è uno dei siti web più popolari per la risposta alle domande, utilizzato da persone di tutto il mondo. È particolarmente diffuso negli Stati Uniti, nel Regno Unito, in Canada, in Australia e in altri Paesi di lingua inglese. L'analisi dei dati di Quora offre numerosi vantaggi, tra cui:
La piattaforma può essere utilizzata per la ricerca, lo sviluppo di contenuti o la creazione di soluzioni di intelligenza artificiale.
Il web scraping si riferisce all'atto di estrarre informazioni e dati da un sito o da una pagina web. È un modo moderno di raccogliere molte informazioni e di convertirle in una struttura organizzata come un file CSV.
Che cos'è il web scraping ce lo spiega la piattaforma Quora:
Quindi, lo scraping dei dati di Quora fornisce informazioni sulla partecipazione degli utenti, sull'importanza e sulla popolarità delle diverse domande e delle risposte che ricevono.
Per effettuare lo scraping dei dati di Quora si utilizzano le librerie Python. Di seguito sono riportate le risorse più importanti che vi permetteranno di raggiungere l'obiettivo:
Queste librerie permettono di interagire con le pagine web e di raccogliere informazioni da Quora senza alcuno sforzo.
Questa sottosezione affronta la costruzione di uno scraper, che sarà un'attenzione graduale. Preparate l'area di lavoro, installate le librerie necessarie, create le procedure per inviare le richieste, per analizzare il codice html e per lavorare con le informazioni recuperate.
Prima di raschiare è necessario preparare l'ambiente di lavoro:
python -m venv quora_scraper
source quora_scraper/bin/activate # Per MacOS e Linux
quora_scraper\Scripts\activate # Per Windows
In questo passaggio si installano le librerie necessarie per il web scraping:
pip install requests beautifulsoup4
Queste interfacce sono essenziali per la trasmissione delle richieste HTTP e la successiva analisi dei dati HTML ricevuti.
Per chiamare una determinata API e ottenere la pagina HTML, utilizzeremo la libreria Requests. È intuitiva e permette di svolgere il lavoro molto velocemente.
url = "https://www.quora.com/How-do-you-open-your-own-company"
response = requests.get(url)
Per poter utilizzare Python, per scrappare le risposte di Quora, abbiamo bisogno di un'altra libreria chiamata BeautifulSoup. Ecco come installarla:
soup = BeautifulSoup(response.text, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')
Per estrarre le domande e le risposte, è sufficiente trovare il tag HTML richiesto che contiene questi dettagli. Prendiamo un caso:
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 tende ad avere molte risposte e spesso è necessario scorrere la pagina per vedere tutto. Per questo utilizzeremo Selenium per automatizzare il sito web.
Di seguito viene illustrato come configurare Selenium e utilizzare i proxy per nascondere meglio la propria identità:
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)
Dopo aver configurato tutto in Selenium, è sufficiente effettuare una richiesta HTTP e continuare a scorrere verso il basso per catturare questi dati:
url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')
driver.get(url)
Una volta terminata la raccolta dei dati, si desidera conservarli in modo da facilitarne l'analisi in seguito. Il modo migliore per farlo è conservarli in formato JSON, il più utilizzato.
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)
Abbiamo salvato i dati in JSON, ma in alcuni casi si potrebbe desiderare di farlo in più di un formato contemporaneamente. Ecco quindi una funzione che fa esattamente questo:
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 ha alcune difese contro lo scraping automatico dei dati, per cui se si cerca di inviare molte richieste a Quora, il vostro indirizzo IP verrà tagliato. Esistono comunque dei modi per aggirare questo problema.
Si tratta di un'imitazione di base del comportamento umano che aggiunge una forma di ritardo quando viene inviata una richiesta.
import time
import random
def random_delay():
time.sleep(random.uniform(2, 5))
Aggiungi questa funzione dopo ogni query per aumentare le possibilità di non essere bloccato.
Si può facilmente evitare il blocco dell'indirizzo IP utilizzando i server proxy. Vediamo come utilizzarli con Requests e Selenium.
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)
Quindi, dopo aver affrontato tutti i passaggi, è il momento di combinarli e inserirli in un unico script.
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')
# Risposte
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")
In questo articolo abbiamo discusso i metodi di scraping di Quora con Python. Tali script costruiti consentono agli utenti di ignorare alcune restrizioni, oltre alla paginazione e al salvataggio dei dati in vari formati, come JSON e CSV.
Per la raccolta di dati su larga scala, il metodo più efficace è l'utilizzo dell'API di Quora. D'altra parte, se si sceglie strategicamente di utilizzare BeautifulSoup o Selenium, l'uso di server proxy è indispensabile per ottenere prestazioni sostenute.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0