在Google App Engine中使用BeautifulSoup解析HTML的Python方法?
我一直在使用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
调用还是被执行了。