Python 如何在不重复代码的情况下用空格填充例外字段?
我正在运行一个网页抓取程序,从一个站点抓取某些数据字段,但是我不能保证所有字段都出现在给定的页面上。如果字段不存在,则应为空。目前,我的代码如下所示Python 如何在不重复代码的情况下用空格填充例外字段?,python,selenium,exception,Python,Selenium,Exception,我正在运行一个网页抓取程序,从一个站点抓取某些数据字段,但是我不能保证所有字段都出现在给定的页面上。如果字段不存在,则应为空。目前,我的代码如下所示 try: field1 = scrape_data_field1(field1) except NotOnPageError: field1 = "" try: field2 = scrape_data_field2(field2) except NotOnPageError: field2 =
try:
field1 = scrape_data_field1(field1)
except NotOnPageError:
field1 = ""
try:
field2 = scrape_data_field2(field2)
except NotOnPageError:
field2 = ""
try:
field3= scrape_data_field3(field3)
except NotOnPageError:
field3 = ""
我不能在同一个try-except块中将这些字段分组在一起,因为这样即使缺少一个字段,它们也会被作为空白填写。对于这个问题,有没有比我目前正在做的笨重的解决方案更优雅的解决方案?如果相关,我将使用selenium从页面中刮取数据。您是否考虑过将
字段
变量绑定到iterable结构中的相关函数?这将允许您在结构上进行迭代,并将相同的逻辑应用于函数/变量集
下面的方法似乎非常巧妙地解决了您的问题,因为将所有这些逻辑放在一个try
/结构中是不合适的,因为引发的第一个异常必然会阻止任何进一步的字段被尝试,正如您在原始帖子中强调的那样
字段映射=[
{“field”:field1,“function”:scrape_data_field1},
{“field”:field2,“function”:scrape_data_field2},
{“field”:field3,“function”:scrape_data_field3}
]
对于字段中的m_映射:
尝试:
m[“函数”](m[“字段”])
除NOTNAPGEERROR外:
m[“字段”]=“”
如您所见,此解决方案基本上将每个字段
与其对应的scrape_data_字段
函数分组为dict
中的值。这些dict
结构存储在一个可以迭代的列表中,以便相同的逻辑可以应用于每个变量/函数配对-即每个函数都是使用运行时传递的配对字段执行的。一种策略可能是生成一个接收函数的函数scrape_data_field1
和参数'field1'并返回try except的结果
def try_execpt_scrape_data(field, _function):
try:
field_out = _function(field)
except:
field_out = ""
return field_out
def _function(argument):
return_this = argument * argument
return return_this
field1 = 3
field_out = try_execpt_scrape_data(field1, _function)
print(field_out)
啊,我现在意识到我的问题有点错了。我不能对每个字段使用相同的scrape_data()函数。这个问题实际上有点不同,我应该说清楚(即field1=scrape_field1(),等等),我应该修改这个问题还是接受这个答案,因为你已经回答了我提出的问题?我会修改这个问题,我会根据变化循环更新/删除我的答案。不幸的是,我现在刚离开家,怀疑明天之前我是否有机会回答这个问题的任何更新。@JoshZwiebel只是想让你知道,我已经根据你在这里概述的更改和你对OP的编辑更新了我的答案。