Я работаю над веб-шабером и пытаюсь создать некоторые исключения, поэтому, когда элемент не существует, он просто переходит к следующему элементу.
Я собираю более 10 элементов, а неЯ уверен, что лучший способ найти исключение и перейти к следующему элементу со всеми из них, я понимаю, что могу сделать оператор IF или Try / Except.
Я попытался реализовать концепцию Try / Except (как показано ниже), но я думаю, что я использовал это неправильно как 1. Мне не хватает некоторых результатов при печати (те, которые не являются исключением), 2. Это запись и печать неверных данных в JSON, где результат не 't существует - кажется, что используются данные из последней строки (я думаю).
Как сделать исключение, чтобы перейти к очистке следующего элемента, если данные не существуют, для всех элементовЯ очищаюсь?
Код, с которым я работаю, выглядит следующим образом (упрощенно):
# -*- coding: UTF-8 -*-
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
import json
import csv
def writeToJSONFile(path, fileName, data):
filePathNameWExt = './' + path + '/' + fileName + '.json'
with open(filePathNameWExt, 'a') as fp:
json.dump(data, fp, ensure_ascii=False)
urls = ['https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d8122594-Reviews-Humble_Grape_Battersea-London_England.html','https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d5561842-Reviews-Gastronhome-London_England.html']
browser = webdriver.Firefox(executable_path="/Users/path/Downloads/geckodriver")
data = []
for url in urls:
browser.get(url)
page = browser.find_element_by_class_name('non_hotels_like')
title = page.find_element_by_class_name('heading_title').text
street_address = page.find_element_by_class_name('street-address').text
try:
day1 = page.find_element_by_xpath("//DIV[@class='hours content']//SPAN[@class='day'][text()='Monday']").text
except NoSuchElementException:
pass
#day1_hours = page.find_element_by_xpath("//div[@class='hours content']//div[2]//span[2]//div[1]").text
print(title)
print(street_address)
print(day1)
#print(day1_hours)
data.append({'title': title, 'street_address': street_address, 'day1': day1})
filename = 'properties'
writeToJSONFile('./', filename, data)
browser.quit()
ОБНОВЛЕНИЕ, как советовал Джон, я добавил ловушку - хотя теперь получаю неверную синтаксическую ошибку!:
try:
day1 = page.find_element_by_xpath("//DIV[@class='hours content']//SPAN[@class='day'][text()='Monday']").text
except NoSuchElementException:
catch NoSuchElementException:
day1 = 'Element not found'