Cita el juego de adivinanzas usando Web Scraping en Python

Requisito previo: instalación de BeautifulSoup 

En este artículo, extraeremos una cita y los detalles del autor de este sitio http//quotes.toscrape.com usando el marco de Python llamado BeautifulSoup y desarrollaremos un juego de adivinanzas usando diferentes estructuras de datos y algoritmos.

El usuario tendrá 4 oportunidades para adivinar el autor de una cita famosa. En cada oportunidad, el usuario recibirá una pista que puede ser la fecha de nacimiento del autor, la primera letra del nombre, la primera letra del segundo nombre, etc. Al adivinar con éxito el autor, se imprime un mensaje y si el usuario no logra adivinar la respuesta incluso después de las 4 oportunidades, se imprime nuevamente un mensaje junto con la respuesta.

Acercarse

  • Módulo de importación
    • Las requests nos ayudan a capturar la página, cuando se recibe la respuesta, se almacena en forma de string.
    • La biblioteca bs4 se usa para crear un objeto beasutifulSoup.
    • La biblioteca csv ayuda a leer y escribir archivos CSV usando python
    • La función de suspensión del módulo de tiempo ayuda a agregar retraso en la ejecución del programa.
    • La función de elección del módulo aleatorio devuelve un elemento aleatorio.
  • Crear una lista para almacenar valores raspados
  • Extraiga los detalles de este enlace: http//quotes.toscrape.com
  • Extraer datos
  • lógica del juego
    • Devuelve elementos aleatorios del diccionario creado
    • Establecer el número de conjeturas
    • Escribir mensaje para el éxito y el fracaso
    • Siga dando pistas hasta que el número de posibilidades llegue a cero o el usuario lo haga bien

Programa:

Python3

import requests
from bs4 import BeautifulSoup
from csv import writer
from time import sleep
from random import choice
  
# list to store scraped data
all_quotes = []
  
# this part of the url is constant
base_url = "http://quotes.toscrape.com/"
  
# this part of the url will keep changing
url = "/page/1"
  
while url:
    
    # concatenating both urls
    # making request
    res = requests.get(f"{base_url}{url}")
    print(f"Now Scraping{base_url}{url}")
    soup = BeautifulSoup(res.text, "html.parser")
  
    # extracting all elements
    quotes = soup.find_all(class_="quote")
  
    for quote in quotes:
        all_quotes.append({
            "text": quote.find(class_="text").get_text(),
            "author": quote.find(class_="author").get_text(),
            "bio-link": quote.find("a")["href"]
        })
    next_btn = soup.find(_class="next")
    url = next_btn.find("a")["href"] if next_btn else None
    sleep(2)
  
quote = choice(all_quotes)
remaining_guesses = 4
print("Here's a quote:  ")
print(quote["text"])
  
guess = ''
while guess.lower() != quote["author"].lower() and remaining_guesses > 0:
    guess = input(
        f"Who said this quote? Guesses remaining {remaining_guesses}")
      
    if guess == quote["author"]:
        print("CONGRATULATIONS!!! YOU GOT IT RIGHT")
        break
    remaining_guesses -= 1
      
    if remaining_guesses == 3:
        res = requests.get(f"{base_url}{quote['bio-link']}")
        soup = BeautifulSoup(res.text, "html.parser")
        birth_date = soup.find(class_="author-born-date").get_text()
        birth_place = soup.find(class_="author-born-location").get_text()
        print(
            f"Here's a hint: The author was born on {birth_date}{birth_place}")
      
    elif remaining_guesses == 2:
        print(
            f"Here's a hint: The author's first name starts with: {quote['author'][0]}")
      
    elif remaining_guesses == 1:
        last_initial = quote["author"].split(" ")[1][0]
        print(
            f"Here's a hint: The author's last name starts with: {last_initial}")
      
    else:
        print(
            f"Sorry, you ran out of guesses. The answer was {quote['author']}")

Producción:

Publicación traducida automáticamente

Artículo escrito por prernaajitgupta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *