Este artigo foca-se em como extrair dados do Quora e porque é que isso pode ser útil, e como o Python pode ser usado para automatizar esta tarefa. Também veremos as principais ferramentas e bibliotecas necessárias para extrair dados deste site.
Quora é um dos sítios Web de resposta a perguntas mais populares, utilizado por pessoas de todo o mundo. É especialmente proeminente nos EUA, no Reino Unido, no Canadá, na Austrália e noutros países de língua inglesa. Existem inúmeros benefícios ao analisar os dados do Quora, tais como:
A plataforma pode ser utilizada na investigação, no desenvolvimento de conteúdos ou na criação de soluções de IA.
A raspagem da Web refere-se ao ato de extrair informações e dados de um sítio Web ou de uma página Web. É uma forma moderna de reunir muita informação e convertê-la numa estrutura organizada como um ficheiro CSV.
O que é web scraping A plataforma Quora nos dá:
Assim, a raspagem de dados do Quora fornece informações sobre a participação do usuário, a importância e a popularidade de diferentes perguntas, bem como as respostas que elas recebem.
Para extrair dados do Quora, são usadas bibliotecas Python. Abaixo estão os recursos mais relevantes que lhe permitirão atingir esse objetivo:
Estas bibliotecas tornam possível interagir com páginas da Web e coletar informações do Quora sem esforço.
Esta subsecção aborda a construção de um scraper, que será uma atenção gradual. Prepare o espaço de trabalho, instale as bibliotecas necessárias, crie procedimentos para enviar pedidos, para analisar o código html e para trabalhar com as informações recuperadas.
Antes de proceder à raspagem, é necessário preparar o ambiente de trabalho:
python -m venv quora_scraper
source quora_scraper/bin/activate # Para MacOS e Linux
quora_scraper\Scripts\activate # Para Windows
Instale as bibliotecas necessárias para a recolha de dados da Web nesta etapa:
pip install requests beautifulsoup4
Estas interfaces são essenciais para a transmissão de pedidos HTTP e para a análise subsequente dos dados HTML recebidos.
Para chamar uma determinada API e obter a página HTML de volta, vamos utilizar a biblioteca Requests. É intuitiva e faz o trabalho muito rapidamente.
url = "https://www.quora.com/How-do-you-open-your-own-company"
response = requests.get(url)
Para usar Python, para extrair respostas do Quora, vamos precisar de outra biblioteca chamada BeautifulSoup. É assim que a instalamos:
soup = BeautifulSoup(response.text, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')
Para extrair as perguntas e respostas, só precisa de encontrar a etiqueta HTML necessária que contém esses detalhes. Vejamos um 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 a ter muitas respostas e muitas vezes é preciso rolar muito a página para ver tudo. Para isso vamos usar o Selenium para automatizar o site.
Abaixo está como configurar o Selenium e usar proxies para esconder melhor sua identidade:
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)
Depois de ter configurado tudo no Selenium, só precisa de fazer um pedido HTTP e, em seguida, continuar a deslocar-se para baixo e a capturar estes dados:
url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')
driver.get(url)
Quando terminar de recolher os dados, deve guardá-los de uma forma que facilite a sua análise posterior. A melhor forma de o fazer é guardá-los no formato JSON, uma vez que é o mais utilizado.
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)
Guardámos os dados em JSON, mas, em alguns casos, pode ser desejável fazê-lo em mais do que um formato ao mesmo tempo. Assim, aqui tem uma função que faz exatamente isso:
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)
O Quora tem algumas defesas contra a recolha automática de dados, pelo que, se tentar enviar muitos pedidos para o Quora, o seu endereço IP será cortado. No entanto, há formas de contornar esta situação.
Essa é uma imitação básica do comportamento humano que adiciona alguma forma de atraso quando uma solicitação é enviada.
import time
import random
def random_delay():
time.sleep(random.uniform(2, 5))
Adicione esta função após cada consulta para aumentar as hipóteses de não ser bloqueado.
Pode-se evitar facilmente o bloqueio do endereço IP usando servidores proxy. Vamos ver como ele pode ser usado com 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)
Assim, depois de ter percorrido todas as etapas, é altura de as combinar e de as colocar num único guião.
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')
# Respostas
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")
Neste artigo, discutimos os métodos de raspagem do Quora com Python. Esses scripts construídos permitem que os usuários substituam algumas restrições junto com a paginação e o salvamento de dados em vários formatos, como JSON e CSV.
Para a coleta de dados em larga escala, o método mais eficaz seria usar a API do Quora. Por outro lado, se você optar estrategicamente por utilizar o BeautifulSoup ou o Selenium, o uso de servidores proxy é uma obrigação para o desempenho sustentado.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Comentários: 0