En este artículo, vamos a extraer JSON de HTML usando BeautifulSoup en Python.
Módulo necesario
- bs4 :Beautiful Soup (bs4) es una biblioteca de Python para extraer datos de archivos HTML y XML. Este módulo no viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.
pip install bs4
- requests :Request le permite enviar requests HTTP/1.1 de manera extremadamente fácil. Este módulo tampoco viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.
pip install requests
Acercarse:
- Importe todos los módulos necesarios.
- Pase la URL en la función de obtención (UDF) para que pase una solicitud GET a una URL y devuelva una respuesta.
Sintaxis: requests.get(url, argumentos)
- Ahora analice el contenido HTML usando bs4.
Sintaxis: BeautifulSoup(page.text, ‘html.parser’)
Parámetros:
- page.text : Es el contenido HTML sin procesar.
- html.parser : especificando el analizador HTML que queremos usar.
- Ahora obtenga todos los datos requeridos con la función find().
Ahora busque la lista de clientes con la etiqueta li, a, p donde se encuentra alguna clase o identificación única. Puede abrir la página web en el navegador e inspeccionar el elemento relevante haciendo clic con el botón derecho, como se muestra en la figura.
- Cree un archivo Json y use el método json.dump() para convertir objetos python en objetos JSON apropiados.
A continuación se muestra la implementación completa:
Python3
# Import the required modules import requests from bs4 import BeautifulSoup import json # Function will return a list of dictionaries # each containing information of books. def json_from_html_using_bs4(base_url): # requests.get(url) returns a response that is saved # in a response object called page. page = requests.get(base_url) # page.text gives us access to the web data in text # format, we pass it as an argument to BeautifulSoup # along with the html.parser which will create a # parsed tree in soup. soup = BeautifulSoup(page.text, "html.parser") # soup.find_all finds the div's, all having the same # class "col-xs-6 col-sm-4 col-md-3 col-lg-3" that is # stored in books books = soup.find_all( 'li', attrs={'class': 'col-xs-6 col-sm-4 col-md-3 col-lg-3'}) # Initialise the required variables star = ['One', 'Two', 'Three', 'Four', 'Five'] res, book_no = [], 1 # Iterate books classand check for the given tags # to get the information of each books. for book in books: # Title of book in <img> tag with "alt" key. title = book.find('img')['alt'] # Link of book in <a> tag with "href" key link = base_url[:37] + book.find('a')['href'] # Rating of book from <p> tag for index in range(5): find_stars = book.find( 'p', attrs={'class': 'star-rating ' + star[index]}) # Check which star-rating class is not # returning None and then break the loop if find_stars is not None: stars = star[index] + " out of 5" break # Price of book from <p> tag in price_color class price = book.find('p', attrs={'class': 'price_color' }).text # Stock Status of book from <p> tag in # instock availability class. instock = book.find('p', attrs={'class': 'instock availability'}).text.strip() # Create a dictionary with the above book information data = {'book no': str(book_no), 'title': title, 'rating': stars, 'price': price, 'link': link, 'stock': instock} # Append the dictionary to the list res.append(data) book_no += 1 return res # Main Function if __name__ == "__main__": # Enter the url of website base_url = "https://books.toscrape.com/catalogue/page-1.html" # Function will return a list of dictionaries res = json_from_html_using_bs4(base_url) # Convert the python objects into json object and export # it to books.json file. with open('books.json', 'w', encoding='latin-1') as f: json.dump(res, f, indent=8, ensure_ascii=False) print("Created Json File")
Producción:
Created Json File
Nuestra salida de archivo JSON:
Publicación traducida automáticamente
Artículo escrito por anilabhadatta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA