在Google App Engine中使用BeautifulSoup解析HTML的Python方法?

1 投票
1 回答
1900 浏览
提问于 2025-04-16 10:19

我一直在使用BeautifulSoup来解析几个网站的HTML,并把每个网站的任务添加到GAE的任务队列中。不过,这个任务队列似乎会重复执行两个任务,这导致日志里出现ApplicationError: 5的错误,或者出现'NoneType' object has no attribute 'findAll'的错误。当我在IDLE上测试时,发现当BeautifulSoup在我传给它的页面中找不到任何内容时,它会生成None对象。我添加了下面的代码,但似乎并没有解决这个问题:

productTable = soup.find('table')

            if productTable == None:
                logging.error('Could not find the product table')
                break

            if productTable.findAll('table') == None:
                logging.error('Product table was empty')
                break

我在想有没有人能给我一些建议,告诉我哪里出了问题,这样我可以修复它。

1 个回答

2

这个应用程序错误可能是因为你用来获取HTML的urlfetch失败了。任务队列会自动重试这个任务,直到它成功(如果你使用的是默认设置)。如果这个错误只是偶尔出现一下,然后在重试后就消失了,那我觉得不用太担心。如果某个任务一直失败,那我就怀疑你要获取的资源可能有问题。

如果你在使用productTable之前先检查一下它是不是None,那么就不会出现'NoneType' object has no attribute 'findAll'这个错误。看起来你的检查没有成功,导致你的productTable.findall调用还是被执行了。

撰写回答