使用Selenium从 JustDial 中提取数据
让我们看看如何使用Selenium和Python从 Justdial 中提取数据。 Justdial 是一家通过电话、网站和移动应用程序在印度提供不同服务的本地搜索的公司。在本文中,我们将提取以下数据:
- 电话号码
- 姓名
- 地址
然后我们可以将数据保存在 CSV 文件中。
方法:
- 导入以下模块:来自selenium的webdriver 、 ChromeDriverManager 、 pandas 、 time和os 。
- 使用driver.get()方法并传递要从中获取信息的链接。
- 使用driver.find_elements_by_class_name()方法并传递“store-details”。
- 实例化空列表以存储值。
- 迭代 StoreDetails 并开始获取所需的各个详细信息。
- 创建用户定义的函数strings_to_number()将提取的字符串转换为数字。
- 显示详细信息,并根据要求将它们保存为 CSV 文件。
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')
# instatiating 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)
输出: