我正在研究网络抓取工具,并尝试构建一些例外,因此当该元素不存在时,它会跳至下一个元素。
我正在抓取10个以上的元素,并且不确定找到异常并使用所有这些元素转到下一个元素的最佳方法,我知道我可以执行IF语句或Try / Except。
我尝试实现“尝试/例外”概念(如下所示),但我认为我不正确地将其用作1。我在打印中缺少一些结果(并非例外),2。它正在将不正确的数据写入和打印到JSON,而结果却不存在-似乎正在使用最后一行的数据(我认为)。
对于我要刮擦的所有元素,如果数据不存在,我该如何例外地刮取下一个元素?
我正在使用的代码如下(简体):
# -*- 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'
答案 0 :(得分:0)
从代码布局来看,似乎可以找到page
,title
和street_address
元素,但找不到day1
元素。如果发生这种情况,您要如何处理?
如果您想完全跳过该网址,请将print()
和data.append(...)
语句移至try:
块内。
如果要为day1
使用一些默认值,请在catch
块中分配它:
catch NoSuchElementException:
day1 = 'Element not found'