gpt4 book ai didi

python - Selenium 实现 Try except 并写入 JSON

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:16 29 4
gpt4 key购买 nike

我正在开发一个网络抓取工具,并尝试构建一些异常,因此当该元素不存在时,它只会跳到下一个元素。

我正在抓取 10 多个元素,但不确定找到异常并使用所有这些元素转到下一个元素的最佳方法,我知道我可以执行 IF 语句或 Try/Except。

我尝试实现 Try/Except 概念(如下),但我认为我错误地使用了它: 1. 我在打印中丢失了一些结果(不属于异常(exception)的结果),2.它正在将不正确的数据写入并打印到 JSON,其中结果不存在 - 它似乎正在使用最后一行的数据(我认为)。

对于我正在抓取的所有元素,如果数据不存在,如何异常(exception)地移动到抓取下一个元素?

我正在使用的代码如下(简化):

# -*- 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'

最佳答案

从您的代码布局来看,您似乎可以找到 pagetitlestreet_address 元素,但找不到 day1 元素。如果发生这种情况,您想如何处理?

如果您想完全跳过该网址,请将 print()data.append(...) 语句移至 try: block 。

如果您想为 day1 使用某些默认值,请在 catch block 中指定它:

catch NoSuchElementException:
day1 = 'Element not found'

关于python - Selenium 实现 Try except 并写入 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52919001/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com