Configure la API para los datos de usuario de GeeksforGeeks usando WebScraping y Flask

Requisito previo: WebScraping en Python , Introducción a Flask

En esta publicación, analizaremos cómo obtener información sobre un usuario de GeeksforGeeks mediante el web scraping y servir la información como una API mediante el micromarco de Python, Flask .

Paso #1: Visite el perfil de autorización

Para raspar un sitio web, el primer paso es visitar el sitio web.

 
Paso #2: Inspeccione la fuente de la página

En la imagen de arriba, puede ver el descDivdiv que contiene datos de usuario. En la siguiente imagen, localice los cuatro mdl-griddivs para cuatro piezas de información.

Sumérjase profundamente, localice los dos bloques por atributo y su valor correspondiente. Esos son los datos de su perfil de usuario.

Encuentre todo esto en la siguiente función que devuelve todos los datos en forma de diccionario.

def get_profile_detail(user_handle):
  
    url = "https://auth.geeksforgeeks.org/user/{}/profile".format(user_handle)
  
    response = requests.get(url)
  
    soup = BeautifulSoup(response.content, 'html5lib')
  
    description_div = soup.find('div', {'class': 'descDiv'})
  
    if not description_div:
        return None
  
    user_details_div = description_div.find('div', {'class': 'mdl-cell'})
  
    specific_details = user_details_div.find_all('div', {'class': 'mdl-grid'})
  
    user_profile = {}
  
    for detail_div in specific_details:
  
        block = detail_div.find_all('div', {'class': 'mdl-cell'})
  
        attribute = block[0].text.strip()
        value = block[1].text.strip()
  
        user_profile[attribute] = value
  
    return {'user profile': user_profile}

Paso #3: Lista de Artículos y Mejoras

Esta vez, intente detectar las distintas etiquetas usted mismo.


Si pudiera detectar los diversos elementos del HTML, también puede escribir fácilmente el código para rasparlo.
Si no pudo, aquí está el código para su ayuda.

def get_articles_and_improvements(user_handle):
    articles_and_improvements = {}
  
    url = "https://auth.geeksforgeeks.org/user/{}/articles".format(user_handle)
  
    response = requests.get(url)
  
    soup = BeautifulSoup(response.content, 'html5lib')
  
    contribute_section = soup.find('section', {'id': 'contribute'})
    improvement_section = soup.find('section', {'id': 'improvement'})
  
    contribution_list = contribute_section.find('ol')
    number_of_articles = 0
    articles = []
    if contribution_list:
        article_links = contribution_list.find_all('a')
        number_of_articles = len(article_links)
        for article in article_links:
            article_obj = {'title': article.text,
                           'link': article['href']}
            articles.append(article_obj)
  
    articles_and_improvements['number_of_articles'] = number_of_articles
    articles_and_improvements['articles'] = articles
  
    improvement_list = improvement_section.find('ol')
    number_of_improvements = 0
    improvements = []
    if improvement_list:
        number_of_improvements = len(improvement_list)
        improvement_links = improvement_list.find_all('a')
        for improvement in improvement_links:
            improvement_obj = {'title': improvement.text,
                               'link': improvement['href']}
            improvements.append(improvement_obj)
  
    articles_and_improvements['number_of_improvements'] = number_of_improvements
    articles_and_improvements['improvements'] = improvements
  
    return articles_and_improvements

 
Paso #4: Matraz de configuración

El código para web scraping está completo. Ahora es el momento de configurar nuestro Flask Server. Aquí está la configuración de la aplicación Flask, junto con todas las bibliotecas necesarias para todo el script.

from bs4 import BeautifulSoup
import requests
from flask import Flask, jsonify, make_response
  
app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False

 
Paso #5: Configuración de la API

Ahora que tenemos las funciones apropiadas, nuestra única tarea es combinar ambos resultados, convertir el diccionario a JSON y luego servirlo en el servidor.

Aquí está el código para un punto final que sirve a la API en función del identificador de usuario que recibe. Recuerde, debemos ocuparnos del identificador de usuario inadecuado, nuestro punto final puede recibir en cualquier momento.

@app.route('/<user_handle>/')
def home(user_handle):
  
    response = get_profile_detail(user_handle)
    if response:
        response.update(get_articles_and_improvements(user_handle))
        api_response = make_response(jsonify(response), 200)
    else:
        response = {'message': 'No such user with the specified handle'}
        api_response = make_response(jsonify(response), 404)
    api_response.headers['Content-Type'] = 'application/json'
    return api_response

Al combinar todo el código, tiene un servidor en pleno funcionamiento que sirve API dinámicas.

Publicación traducida automáticamente

Artículo escrito por vibhu4agarwal 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 *