Cree un rastreador de precios de combustible usando Python

En este estilo de vida moderno, el combustible se ha convertido en una necesidad para todos los seres humanos. Es una base para nuestro estilo de vida. Entonces, vamos a escribir un script para rastrear su precio usando Python.

Módulos necesarios

  • 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: Solicitud le permite enviar requests HTTP/1.1 de forma extremadamente sencilla. Este módulo tampoco viene integrado con Python. Para instalar este tipo, escriba el siguiente comando en la terminal.
pip install requests

Veamos la ejecución paso a paso del script.

Paso 1: importar todas las dependencias

Python3

# import module
import pandas as pd
import requests
from bs4 import BeautifulSoup

Paso 2: Cree una función de obtención de URL

Python3

# user define function
# Scrape the data
def getdata(url):
    r = requests.get(url)
    return r.text

Paso 3: ahora pase la URL a la función getdata() y convierta esos datos en código HTML

Python3

# link for extract html data
htmldata = getdata("https://www.goodreturns.in/petrol-price.html")
soup = BeautifulSoup(htmldata, 'html.parser')
result = soup.find_all("div", class_="gold_silver_table")
print(result)

Producción :

[<div class=”gold_silver_table”> <table border=”0″ cellpadding=”1″ cellpacing=”1″ width=”100%”> <tr class=”first”> <td class=”heading” width= ”200″>Ciudad</td> <td class=”heading” width=”200″>Precio de hoy</td> <td class=”heading” width=”200″>Precio de ayer</td> </tr > <tr class=”even_row”> <td><a href=”/precio-de-la-gasolina-en-nueva-delhi.html” title=”Nueva Delhi”>Nueva Delhi</a></td> <td> ₹ 82,08</td> <td> ₹ 82,03</td> </tr> <tr class=”odd_row”> <td><a href=”/precio-de-la-gasolina-en-calcuta.html” title=”Calcuta ”>Calcuta</a></td> <td> ₹ 83,57</td> <td> ₹ 83,52</td> </tr> <tr class=”even_row”> <td><a href=”/ precio-de-la-gasolina-en-mumbai.html” title=”Mumbai”>Mumbai</a></td><td> ₹ 88,73</td> <td> ₹ 88,68</td> </tr> <tr class=”odd_row”> <td><a href=”/precio-de-la-gasolina-en-chennai.html” title =»Chennai»>Chennai</a></td> <td> ₹ 85,04</td> <td> ₹ 85,00</td> </tr> <tr class=»even_row»> <td><a href =»/precio-de-la-gasolina-en-gurgaon.html» title=»Gurgaon»>Gurgaon</a></td> <td> ₹ 79,92</td> <td> ₹ 79,84</td> </tr> <tr class=”odd_row”> <td><a href=”/precio-de-la-gasolina-en-noida.html” title=”Noida”>Noida</a></td> <td> ₹ 82,23</td > <td> ₹ 82,30</td> </tr> <tr class=”even_row”> <td><a href=”/precio-de-la-gasolina-en-bangalore.html” title=”Bangalore”>Bangalore</ a></td> <td> $84,75</td> <td> $84,70</td> </tr> <tr class=”odd_row”> <td><a href=”/precio-de-la-gasolina-en-bhubaneswar.html” title=”Bhubaneswar”>Bhubaneswar</a></td> < td> ₹ 82,47</td> <td> ₹ 82,59</td> </tr> <tr class=”even_row”> <td><a href=”/precio-de-la-gasolina-en-chandigarh.html” title= ”Chandigarh”>Chandigarh</a></td> <td> ₹ 78,96</td> <td> ₹ 78,92</td> </tr> <tr class=”odd_row”> <td><a href= ”/precio-de-la-gasolina-en-hyderabad.html” title=”Hyderabad”>Hyderabad</a></td> <td> ₹ 85,30</td> <td> ₹ 85,25</td> </tr> < tr class=”even_row”> <td><a href=”/precio-de-la-gasolina-en-jaipur.html” title=”Jaipur”>Jaipur</a></td> <td> ₹ 90,08</td> <td> ₹ 89,24</td> </tr> <tr class=”odd_row”> <td><a href=”/precio-de-la-gasolina-en-lucknow.html” title=”Lucknow”>Lucknow</a></td> <td> ₹ 82,20</td> <td> ₹ 82,09</td> </tr> <tr class=”even_row”> <td><a href=”/precio-de-la-gasolina-en-patna.html” title=”Patna”>Patna</a ></td> <td> ₹ 84,73</td> <td> ₹ 84,88</td> </tr> <tr class=”odd_row”> <td><a href=”/precio-de-gasolina-en- trivandrum.html” title=”Trivandrum”>Trivandrum</a></td> <td> ₹ 83,91</td> <td> ₹ 84,03</td> </tr> </table> </div>]a href=”/precio-de-la-gasolina-en-patna.html” title=”Patna”>Patna</a></td> <td> ₹ 84,73</td> <td> ₹ 84,88</td> </ tr> <tr class=”odd_row”> <td><a href=”/precio-de-la-gasolina-en-trivandrum.html” title=”Trivandrum”>Trivandrum</a></td> <td> ₹ 83,91< /td> <td> $84,03</td> </tr> </tabla> </div>]a href=”/precio-de-la-gasolina-en-patna.html” title=”Patna”>Patna</a></td> <td> ₹ 84,73</td> <td> ₹ 84,88</td> </ tr> <tr class=”odd_row”> <td><a href=”/precio-de-la-gasolina-en-trivandrum.html” title=”Trivandrum”>Trivandrum</a></td> <td> ₹ 83,91< /td> <td> $84,03</td> </tr> </tabla> </div>]

Nota: estos scripts le darán solo datos sin procesar en formato de string que tiene que imprimir sus datos con sus necesidades. 

Paso 4: Ahora, busque los datos que necesita en Sting con soup.find_all().

Python3

# Declare string var
# Declare list
mydatastr = ''
result = []
 
# searching all tr in the html data
# storing as a string
for table in soup.find_all('tr'):
    mydatastr += table.get_text()
 
# set according to your required
mydatastr = mydatastr[1:]
itemlist = mydatastr.split("\n\n")
 
for item in itemlist[:-5]:
    result.append(item.split("\n"))
 
result

Producción :

Paso 4: Cree un DataFrame para mostrar su resultado.

Python3

# Calling DataFrame constructor on list
df = pd.DataFrame(result[:-8])
df

Código completo:

Python3

# import module
import requests
import pandas as pd
from bs4 import BeautifulSoup
 
# link for extract html data
 
 
def getdata(url):
    r = requests.get(url)
    return r.text
 
 
htmldata = getdata("https://www.goodreturns.in/petrol-price.html")
soup = BeautifulSoup(htmldata, 'html.parser')
 
# Declare string var
# Declare list
mydatastr = ''
result = []
 
# searching all tr in the html data
# storing as a string
for table in soup.find_all('tr'):
    mydatastr += table.get_text()
 
# set according to your required
mydatastr = mydatastr[1:]
itemlist = mydatastr.split("\n\n")
 
for item in itemlist[:-5]:
    result.append(item.split("\n"))
 
# Calling DataFrame constructor on list
df = pd.DataFrame(result[:-8])
df

Producción :

Publicación traducida automáticamente

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