Veamos cómo extraer datos de Justdial usando Selenium y Python. Justdial es una empresa que ofrece búsqueda local de diferentes servicios en India por teléfono, sitio web y aplicaciones móviles. En este artículo estaremos extrayendo los siguientes datos:
- Número de teléfono
- Nombre
- Dirección
Luego podemos guardar los datos en un archivo CSV.
Acercarse:
- Importe los siguientes módulos: webdriver de selenium , ChromeDriverManager , pandas , time y os .
- Use el método driver.get() y pase el enlace del que desea obtener información.
- Utilice el método driver.find_elements_by_class_name() y pase ‘store-details’.
- Crear instancias de listas vacías para almacenar los valores.
- Repita StoreDetails y comience a obtener los detalles individuales que se requieren.
- Cree una función definida por el usuario strings_to_number() para convertir la string extraída en números.
- Muestre los detalles y guárdelos como un archivo CSV de acuerdo con los requisitos.
Python3
# importing the modules from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) import pandas as pd import time import os # driver.get method() will navigate to a page given by the URL address driver.get("https://www.justdial.com/Delhi/Ceiling-Tile-Dealers-Armstrong/nct-11271379") # the user-defined function def strings_to_num(argument): switcher = { 'dc': '+', 'fe': '(', 'hg': ')', 'ba': '-', 'acb': '0', 'yz': '1', 'wx': '2', 'vu': '3', 'ts': '4', 'rq': '5', 'po': '6', 'nm': '7', 'lk': '8', 'ji': '9' } return switcher.get(argument, "nothing") # fetching all the store details storeDetails = driver.find_elements_by_class_name('store-details') # instantiating empty lists nameList = [] addressList = [] numbersList = [] # iterating the storeDetails for i in range(len(storeDetails)): # fetching the name, address and contact for each entry name = storeDetails[i].find_element_by_class_name('lng_cont_name').text address = storeDetails[i].find_element_by_class_name('cont_sw_addr').text contactList = storeDetails[i].find_elements_by_class_name('mobilesv') myList = [] for j in range(len(contactList)): myString = contactList[j].get_attribute('class').split("-")[1] myList.append(strings_to_num(myString)) nameList.append(name) addressList.append(address) numbersList.append("".join(myList)) # initialize data of lists. data = {'Company Name': nameList, 'Address': addressList, 'Phone': numbersList} # Create DataFrame df = pd.DataFrame(data) print(df) # Save Data as .csv df.to_csv('demo1.csv', mode = 'a', header = False)
Producción: