Niniejszy artykuł koncentruje się na tym, jak wyodrębnić dane z Quory i dlaczego może to być przydatne, a także w jaki sposób można zautomatyzować to zadanie za pomocą Pythona. Przyjrzymy się również głównym narzędziom i bibliotekom potrzebnym do skrobania z tej strony.
Quora to jedna z najpopularniejszych witryn z odpowiedziami na pytania, z której korzystają ludzie z całego świata. Jest on szczególnie popularny w USA, Wielkiej Brytanii, Kanadzie, Australii i innych krajach anglojęzycznych. Analiza danych Quora przynosi wiele korzyści, takich jak:
Platforma może być wykorzystywana do badań, tworzenia treści lub budowania rozwiązań AI.
Web scraping odnosi się do wyodrębniania informacji i danych z witryny internetowej lub strony internetowej. Jest to nowoczesny sposób gromadzenia wielu informacji i konwertowania ich do zorganizowanej struktury, takiej jak plik CSV.
Co to jest web scraping platforma Quora daje nam:
W ten sposób skrobanie danych Quora daje wgląd w udział użytkowników, znaczenie i popularność różnych pytań, a także odpowiedzi, które otrzymują.
W celu skrobania danych Quora używane są biblioteki Python. Poniżej znajdują się najistotniejsze zasoby, które pozwolą ci osiągnąć ten cel:
Biblioteki te umożliwiają interakcję ze stronami internetowymi i zbieranie informacji z Quory bez wysiłku.
Ten podrozdział odnosi się do budowy scrapera, który będzie krok po kroku. Przygotuj przestrzeń roboczą, zainstaluj wymagane biblioteki, utwórz procedury wysyłania żądań, analizowania kodu html i pracy z pobranymi informacjami.
Przed przystąpieniem do skrobania należy przygotować środowisko pracy:
python -m venv quora_scraper
source quora_scraper/bin/activate # Dla systemów MacOS i Linux
quora_scraper\Scripts\activate # Dla systemu Windows
W tym kroku należy zainstalować niezbędne biblioteki, które będą potrzebne do skrobania stron internetowych:
pip install requests beautifulsoup4
Interfejsy te są niezbędne do przesyłania żądań HTTP, a następnie analizowania otrzymanych danych HTML.
Aby wywołać określony interfejs API i uzyskać z powrotem stronę HTML, użyjemy biblioteki Requests. Jest ona intuicyjna i wykonuje swoją pracę bardzo szybko.
url = "https://www.quora.com/How-do-you-open-your-own-company"
response = requests.get(url)
Aby użyć Pythona do skrobania odpowiedzi z Quory, będziemy potrzebować innej biblioteki o nazwie BeautifulSoup. Oto jak ją zainstalować:
soup = BeautifulSoup(response.text, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')
Aby wyodrębnić pytania i odpowiedzi, wystarczy znaleźć wymagany znacznik HTML, który zawiera te szczegóły. Weźmy przykład:
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 ma tendencję do posiadania wielu odpowiedzi i często trzeba dużo przewijać stronę, aby zobaczyć wszystko. W tym celu będziemy używać Selenium do automatyzacji strony.
Poniżej opisano, jak skonfigurować Selenium i używać serwerów proxy, aby lepiej ukryć swoją tożsamość:
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)
Po skonfigurowaniu wszystkiego w Selenium wystarczy wykonać żądanie HTTP, a następnie przewijać w dół i przechwytywać te fragmenty danych:
url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')
driver.get(url)
Po zakończeniu zbierania danych należy przechowywać je w sposób ułatwiający ich późniejszą analizę. Najlepszym sposobem na to jest przechowywanie ich w formacie JSON, ponieważ jest on najczęściej używany.
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)
Zapisaliśmy dane w formacie JSON, ale w niektórych przypadkach może być pożądane, aby zrobić to w więcej niż jednym formacie naraz. Mamy więc tutaj funkcję, która dokładnie to robi:
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 ma pewne zabezpieczenia przed automatycznym skrobaniem danych, ponieważ próba wysłania wielu żądań do Quory spowoduje odcięcie adresu IP. Istnieją jednak sposoby na obejście tego problemu.
Jest to podstawowa mimikra ludzkiego zachowania, która dodaje pewną formę opóźnienia podczas wysyłania żądania.
import time
import random
def random_delay():
time.sleep(random.uniform(2, 5))
Dodaj tę funkcję po każdym zapytaniu, aby zwiększyć szanse na to, że nie zostanie zablokowana.
Można łatwo uniknąć blokowania adresu IP za pomocą serwerów proxy. Zobaczmy, jak można to wykorzystać z Requests i 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)
Po wykonaniu wszystkich kroków nadszedł czas, aby je połączyć i umieścić w jednym skrypcie.
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')
# Odpowiedzi
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")
W tym artykule omówiliśmy metody skrobania Quora za pomocą Pythona. Tak skonstruowane skrypty umożliwiają użytkownikom zastępowanie niektórych ograniczeń wraz z paginacją i zapisywaniem danych w różnych formatach, takich jak JSON i CSV.
W przypadku gromadzenia danych na dużą skalę najskuteczniejszą metodą byłoby użycie interfejsu API Quora. Z drugiej strony, jeśli strategicznie zdecydujesz się wykorzystać BeautifulSoup lub Selenium, wówczas korzystanie z serwerów proxy jest koniecznością dla zapewnienia trwałej wydajności.
Komentarze: 0