У цій статті ми розглянемо, як скрапити дані з Quora, чому це може бути корисним і як Python допомагає автоматизувати цей процес. Ми також обговоримо основні інструменти та бібліотеки, які знадобляться для збору інформації з платформи.
Quora — один із провідних веб-сайтів питань та відповідей в світі. Особливо користується популярністю у США, Великій Британії, Канаді, Австралії та інших англомовних країнах. Аналіз Quora дає такі переваги:
Платформу використовують для досліджень, створення контенту або розробки штучного інтелекту.
Веб-скрапінг — це процес вилучення даних із веб-сайтів. Це техніка, яка використовується для збору великих обсягів інформації і подальшого перетворення їх у структурований формат, як наприклад CSV.
Із платформи Quora можна отримати такі дані:
Це показує, що веб-скрапінг 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 = '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)
Отже, коли ми розглянули всі кроки, настав час обʼєднати їх у єдиний скрипт.
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.com!
Коментарі: 0