BeautifulSoup对脚本的日志输出有影响!?
使用logging模块记录程序日志,日志内容准备放在文件里,不要显示在终端,所以只给logger配置了一个fileHandler。
但经过BeautifulSoup的一些操作后,发现本来要发到文件的日志信息,在终端也能看到,而且此后的所有日志信息都会在发给文件的同时发给终端,也就是说logger多了一个StreamHanlder。
但如果换其他的网页,比如把下边的http://astro.sina.com.cn换成http://www.baidu.com,就不会出现这种情况。所以可以肯定是BS在处理一些特殊的网页时,会触及logging操作。
很郁闷,这是BS的BUG吗?该怎么处理呢?
看看这段代码吧:
import urllibimport loggingfrom bs4 import BeautifulSoup#设置loggerlogger = logging.getLogger('test')fHandler = logging.FileHandler('test.log')logger.addHandler(fHandler)#分析一个网页sock = urllib.urlopen('http://astro.sina.com.cn')html = sock.read()bSoup = BeautifulSoup(html,'lxml')for tag in bSoup.find_all('a'): if tag.get('href') is not None: print tag.get('href')logger.warn('Eh? Can you find me in your terminal ? I think I should just be in a file ! ')> grep log bs4/*bs4/dammit.py:import loggingbs4/dammit.py: logging.warning(Binary file bs4/dammit.pyc matchesbs4/tests/test_soup.py:import loggingbs4/tests/test_soup.py: logging.disable(logging.WARNING)bs4/tests/test_soup.py: logging.disable(logging.NOTSET)