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 descDiv
div que contiene datos de usuario. En la siguiente imagen, localice los cuatro mdl-grid
divs 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