#python #selenium #web-scraping
Вопрос:
Мне нужно уточнить некоторые детали после поиска модели телефона на Флипкарте. Я решил просмотреть таблицу и получить данные. Вот код, который я использую
# creating a URL variable to store website URL
url_fkrt=('https://flipkart.com')
# Establishing connection with the website
driver.get(url_fkrt)
time.sleep(2)
# Closing the login dialogue box appearing at first visit
try:
driver.find_element_by_xpath("//button[@class='_2KpZ6l _2doB4z']").click()
except NoSuchElementException:
pass
# Creating object of the search bar by finding it through Class name
search_bar_fk=driver.find_element_by_class_name('_3704LK')
# Clearing the bar if there is any text in it
search_bar_fk.clear()
# Sending required product to the search bar
search_bar_fk.send_keys('galaxy note 20')
# Creating object of the search button and sending click commamnd
search_btn_fk=driver.find_element_by_class_name('_34RNph')
search_btn_fk.click()
time.sleep(3) # pausing the code for 3 seconds, allowing page to load
# Creating empty lists to store data
phone_name=[]
phone_colour=[]
phone_ram=[]
phone_storage=[]
camera_p=[]
camera_s=[]
display_size=[]
display_resolution=[]
phone_processor=[]
processor_cores=[]
battery_capacity=[]
urls=[]
# Collecting URLs for each product on the page
for links in driver.find_elements_by_xpath("//a[@class='_1fQZEK']"):
urls.append(links.get_attribute('href'))
# Iterating through the URL list and accessing each link to extract data
for url in urls:
driver.get(url)
time.sleep(2)
# Finding the Read More button and clicking it
driver.find_element_by_xpath("//button[@class='_2KpZ6l _1FH0tX']").click()
time.sleep(1)
# Storing all the table rows
model=driver.find_elements_by_xpath("//tr[@class='_1s_Smc row']")
# Iterating through the Table rows to get required data
for name in model:
text1=name.find_element_by_xpath("td[1]").text # Storing text for first Table Data for each row to check 'if' condition
# Extracting Model name
if text1=='Model Name':
phone_name.append(name.find_element_by_xpath("td[2]").text)
# Extracting Phone Color
if text1=='Color':
phone_colour.append(name.find_element_by_xpath("td[2]").text)
# Extracting Display Size
if text1=='Display Size':
display_size.append(name.find_element_by_xpath("td[2]").text)
# Extracting Display Resolution
if text1=='Resolution':
display_resolution.append(name.find_element_by_xpath("td[2]").text)
# Extracting Processor
if text1=='Processor Type':
phone_processor.append(name.find_element_by_xpath("td[2]").text)
# Extracting Cores in Processor
if text1=='Processor Core':
processor_cores.append(name.find_element_by_xpath("td[2]").text)
# Extracting Internal Storage(ROM)
if text1=='Internal Storage':
phone_storage.append(name.find_element_by_xpath("td[2]").text)
# Extracting RAM Memory
if text1=='RAM':
phone_ram.append(name.find_element_by_xpath("td[2]").text)
# Extracting Primary Camera Details
if text1=='Primary Camera':
camera_p.append(name.find_element_by_xpath("td[2]").text)
# Extracting Secondary Camera Details
if text1=='Secondary Camera':
camera_s.append(name.find_element_by_xpath("td[2]").text)
# Extracting Battery Capacity
if text1=='Battery Capacity':
battery_capacity.append(name.find_element_by_xpath("td[2]").text)
Чего я не могу сделать, так это то, что если конкретные детали (предположим, «процессор») не найдены для модели, то она должна добавить » — » в список.
Есть какие-нибудь предложения?? Или есть ли какой-либо другой подход лучше, чем этот.
Комментарии:
1. первое использование
find_element_by_xpath
, следующая проверка, если вы что — то получили — возможно, потребуется запустить в try/except-и затем добавить значение или-
в список.2. Я бы сохранил всю информацию для одного телефона в виде словаря и добавил ее в один список —
append( {"phone_name": ..., "phone_colour": ... , ...} )
Ответ №1:
Если я вас правильно понимаю, вы можете сделать что-то подобное для всех деталей:
desc_td = name.find_element_by_xpath("td[2]")
desc_dtl = desc_td.text if desc_td is not None else "-"
phone_processor.append(desc_dtl)
Это делается для добавления значения описания продукта, если оно существует, а если нет, то вместо него будет добавлено» -«.