我在使用Beautifulsoup抓取一些页面时遇到了很多错误,主要是因为有些页面在HTML中有一些细微的差异,或者确实缺少字段。你知道吗
我正在寻找一个干净的方法来处理这些,但我还没有找到一个在文件或在另一个问题。我目前正在用try来处理这个问题,因为如果缺少一个字段,我仍然希望检索其余字段。你知道吗
try:
address = house.find(text=re.compile('[0-9]{4}[ ]?[azAZ]{2}'))
except:
address = "ERR No Address"
然而,这导致了许多try-except子句,我想知道在保持代码可读性的同时,如何更好地处理这个问题?你知道吗
编辑:针对凯文的回答:函数确实是我想要的,但我有以下问题:
考虑到可扩展性,我将如何利用这个函数生成一个不仅接受上述find调用,而且还接受任何find调用的函数?我需要捕获以下调用,例如:
house.find("a", class_='object-street').text)
house.find("a", class_='object-street').attrs['href']
house.find('span', title=re.compile('Number of')).text
house.find("span", title="WaitingFor").text
我想我在找一个“包装工”,但在这里没有经验。任何正确方向的提示都将不胜感激!你知道吗
创建一个函数,尝试查找文本,并返回一个字符串错误消息,而不是引发错误。你知道吗
然后可以使用此函数检索可能缺少的字段,而不需要任何内联try except子句。你知道吗
编辑:您可以使函数稍微更具可扩展性,接受
find
可以接受的任何参数:。。。但是您不能使用它来访问任何属性,例如
text
或attrs['href']
。你知道吗编辑:您可以创建一个特殊的对象,其中包含一条错误消息,用于您可能要访问的所有属性。你知道吗
但是,只有当您要访问
text
或attrs
属性时,这个才有效。safe_find(house, "ERR No Address", text=re.compile('[0-9]{4}[ ]?[azAZ]{2}'))
后面没有.text
或.attrs["stuff"]
,它将为您提供一个FakeResult实例,而不是一个字符串。你知道吗相关问题 更多 >
编程相关推荐