В этой статье рассмотрим, как скрапить данные с Quora, для чего это может быть полезным и как Python помогает автоматизировать этот процесс. Кроме того, рассмотрим основные инструменты и библиотеки, которые понадобятся для сбора информации с платформы эффективно.
Quora — один из ведущих веб-сайтов вопросов и ответов в мире. Особенно популярен в США, Великобритании, Канаде, Австралии и других англоязычных странах. Анализ Quora предоставляет определенные преимущества, а именно:
В большинстве своем, платформа используется для исследований, создания контента или разработки искусственного интеллекта.
Веб-скрапинг — процесс извлечения разнообразных данных с веб-сайтов, в данном случае с платформы Quora. Это техника, которая используется для сбора больших объемов информации и последующего преобразования их в структурированный формат, к примеру CSV.
С платформы можно получить следующие данные:
Это показывает, что веб-скрапинг Quora позволяет детально анализировать пользователей, актуальность и популярность вопросов и ответов на платформе.
Чтобы эффективно собрать данные с Quora, понадобятся определенные библиотеки Python. Вот основные инструменты, которые помогут в этом процессе:
Эти библиотеки дадут возможность эффективно работать с веб-страницами и получать необходимые данные с Quora.
В этом разделе шаг за шагом показан процесс создания скрапера. Настроим среду, установим необходимые библиотеки, научимся отправлять запросы, парсить HTML-код и обрабатывать полученные данные. Приступим же.
Перед началом скрапинга нужно настроить рабочую среду:
python -m venv quora_scraper
source quora_scraper/bin/activate # Для MacOS и Linux
quora_scraper\Scripts\activate # Для Windows
Далее установим библиотеки, которые понадобятся для скрапинга:
pip install requests beautifulsoup4
Они понадобятся, чтобы отправлять HTTP-запросы и позже парсить полученный HTML-код.
Чтобы отправить HTTP-запрос и получить HTML-страницу будем использовать библиотеку requests. Она проста в использовании и позволит быстро выполнять поставленную задачу:
url = "https://www.quora.com/How-do-you-open-your-own-company"
response = requests.get(url)
Для скрапинга ответов используем следующую библиотеку Python — BeautifulSoup. Вот как настроить ее, чтобы начать собирать данные:
soup = BeautifulSoup(response.text, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')
Для извлечения вопросов и ответов нужно лишь найти необходимый HTML-код, где содержится эта информация. Пример:
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 часто бывает много ответов и чтобы просмотреть их все нужно прокрутить страницу сильно ниже. Для этого будем использовать Selenium, для такого специфического взаимодействия с сайтом.
Рассмотрим, как настроить Selenium и как использовать прокси, для лучшей защиты:
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 настроен, подадим HTTP-запрос, прокрутим ниже и сохраним эти данные:
url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')
driver.get(url)
После сбора данных важно сохранить их в удобном формате, чтобы затем можно было провести анализ. Наиболее распространенный формат — JSON. Его и используем.
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)
Сохранение данных в JSON реализовано на этом этапе, но иногда нужно экспортировать их в разные форматы одновременно.
Напишем универсальную функцию, которая позволяет экспортировать данные сразу в оба формата:
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 имеет защиту от автоматизированного сбора данных, поэтому отправлять слишком много запросов неэффективно и не рекомендуется, так как сайт может заблокировать IP. Чтобы этого избежать, есть определенные техники.
Это простая имитация поведения реального пользователя путем введения пауз между запросами.
import time
import random
def random_delay():
time.sleep(random.uniform(2, 5))
Добавляйте эту функцию после каждого запроса, чтобы уменьшить риск блокировки.
Чтобы избежать блокировки IP-адреса, можно и нужно использовать прокси. Рассмотрим, как использовать прокси через requests и Selenium.
url = "https://www.quora.com/How-do-you-open-your-own-company"
proxy = 'ЛОГИН:ПАРОЛЬ@IP-АДРЕС:ПОРТ'
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)
Итак, все шаги рассмотрено, настало время объединить их в единый скрипт.
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')
# Ответы
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")
Процесс как спарсить данные с помощью Python с Quora рассмотрен всесторонне. Скрипт позволяет обходить ограничения, выполнять пагинацию и сохранять данные в JSON и CSV.
Если планируете масштабный сбор данных, используйте API Quora. Если же решили использовать BeautifulSoup или Selenium, комбинируйте их с прокси-серверами для стабильности.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.io!
Комментарии: 0