Jak zeskrobać pytania i odpowiedzi z Quora za pomocą Pythona

Komentarze: 0

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.

Po co skrobać dane z Quory?

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:

  • Dostarczanie aktualnych informacji na odpowiednie tematy, analizy ekspertów i pytania dotyczące trendów w różnych tematach.
  • Skuteczna interakcja z docelowymi odbiorcami poprzez odpowiadanie na ich zapytania i wykorzystywanie zaufania do reputacji firmy lub osobistego eksperta.
  • Uzyskiwanie wysokiej jakości odpowiedzi, dzielenie się doświadczeniami i informacjami bez przeprowadzania holistycznych, obszernych wyszukiwań.

Platforma może być wykorzystywana do badań, tworzenia treści lub budowania rozwiązań AI.

Zrozumienie Quora Web Scraping

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:

  • samo pytanie;
  • linki odpowiadające niektórym stronom Quora;
  • liczba dotychczasowych odpowiedzi i pytań;
  • ludzi, którzy są autorami odpowiedzi;
  • daty ich publikacji.

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ą.

Niezbędne narzędzia do scrapingu Quora

W celu skrobania danych Quora używane są biblioteki Python. Poniżej znajdują się najistotniejsze zasoby, które pozwolą ci osiągnąć ten cel:

  • BeautifulSoup - do parsowania stron HTML i zbierania poszukiwanych informacji.
  • Requests - do formułowania żądań Hypertext Transfer Protocol i pobierania stron internetowych.
  • Selenium - do automatyzacji przeglądarki, a także do przechwytywania dynamicznie generowanej zawartości.

Biblioteki te umożliwiają interakcję ze stronami internetowymi i zbieranie informacji z Quory bez wysiłku.

Budowanie skryptu Quora Scraping Python

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.

Krok 1: Konfiguracja środowiska projektu Python

Przed przystąpieniem do skrobania należy przygotować środowisko pracy:

  1. Pobierz i zainstaluj Python z oficjalnej strony.
  2. Skonfiguruj środowisko wirtualne, aby podzielić używane biblioteki.
    
    python -m venv quora_scraper
    source quora_scraper/bin/activate  # Dla systemów MacOS i Linux
    quora_scraper\Scripts\activate     # Dla systemu Windows
    
    

Krok 2: Instalacja wymaganych bibliotek Pythona

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.

Krok 3: Wysyłanie zapytań do serwisu Quora

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)

Krok 4: Analizowanie odpowiedzi HTML

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')

Krok 5: Wyodrębnianie pytań i odpowiedzi Quora

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)

Krok 6: Obsługa paginacji dla wielu stron

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)

Krok 7: Efektywne przechowywanie zebranych danych

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)

Krok 8: Eksportowanie danych do formatu CSV lub JSON

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)

Krok 9: Obsługa limitów stawek i blokad

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.

  1. Dodanie czasu przed wysłaniem kolejnego żądania.

    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.

  2. Korzystanie z serwerów proxy.

    Można łatwo uniknąć blokowania adresu IP za pomocą serwerów proxy. Zobaczmy, jak można to wykorzystać z Requests i Selenium.

    • requests:
      
      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)
      
      
    • Selenium:
      
      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)
      
      

Krok 10: Składanie wszystkiego razem

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")

Wnioski

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 komentarze