0

我目前正在使用 Selenium & BeautifulSoup 来提取数据,有时不同页面的格式可能会略有不同,最多 3 种不同类型的 html 差异,当涉及到不同页面之一时,我无能为力它给了我一个例外,因为数据不存在。

我可以做类似 if Exception = AttributeError 的事情,试试这段代码并从它停止的地方继续吗?

AttributeError: 'NoneType' object has no attribute 'text'

这是当前代码

  price = soup.find('li', {'id' :'J_PromoPrice'})
        priced = price.find('strong', {'class' :'tb-rmb-num'}).text
        if priced == "":
           priced = price.find('strong', {'class' :'tb-rmb-num'}).text
        else:
           print ("No Normal Price Found")

如您所见,已经有一组 IF ELSE 来检测它是否为空,如果为空 = 找到另一个可以处理 2 种不同类型 html 的文本标签,但我面临的第三个问题是它没有' 甚至没有标签,但它确实在其他地方有它。

简而言之,如果我遇到此异常,我会尝试从其他地方获取文本,然后从异常被打到我脸上的地方继续执行脚本。

更新完整跟踪

Traceback (most recent call last):
  File "C:\Users\X\Desktop\Python\python.py", line 521, in <module>
    getLoadItem()
  File "C:\Users\X\Desktop\Python\python.py", line 57, in getLoadItem
    getLoadItemAnalyse(loop['ID'],loop['Link'])
  File "C:\Users\X\Desktop\Python\python.py", line 236, in getLoadItemAnalyse
    priced = price.find('strong', {'class' :'tb-rmb-num'}).text
AttributeError: 'NoneType' object has no attribute 'text'
4

1 回答 1

2

您可以使用try/except块。

例如:

price = soup.find('li', {'id' :'J_PromoPrice'})
try:
    priced = price.find('strong', {'class' :'tb-rmb-num'}).text
    if priced == "":
        priced = price.find('strong', {'class' :'tb-rmb-num'}).text
    else:
        print ("No Normal Price Found")
except AttributeError:
     # Try this code instead

这基本上意味着,“好吧,试试这段代码,它可能会搞砸”,在这种情况下,做catch块下面的事情。

于 2013-10-30T12:06:05.703 回答