我试图解决这个问题3个小时。请问你能告诉我什么是错的?这些是我的代码
import urllib
from jin import HtmlMigrate
from bs4 import BeautifulSoup
import logging
list2=[]
logging.basicConfig( format='%(levelname)s:%(message)s', level=logging.INFO)
current = 1
source =""
for v in range(13960581, 13960585):
list=[]
try:
fil = urllib.urlopen(source+str(v))
fill = fil.read()
soup = BeautifulSoup(fill)
k = soup.find("div", "post-taglist")
for i in k.findAll("a"):
list.append(i.string)
except AttributeError:
pass
if "python" in list:
try:
a = soup.find( "div", "post-text")
list2.append(a)
logging.info("%s question localized." % str(current))
except AttributeError:
pass
current +=1
mig = HtmlMigrate()
out = file("stackover.html", "w")
for i in list2:
mig.run(i, out)
out.close()
问题是我在每个logger.info调用的控制台中都有重复的条目。我该如何解决这个问题?
答案 0 :(得分:1)
这是我的准备:你不看到重复的日志条目。相反,因为您的日志记录调用处于循环中,所以您会看到对logging.info
的不同调用。
(dis)确认这一点的一种方法是将您的日志记录调用更改为包含v
:
logging.info("[%s] %s question localized." % (v, str(current)))
让我们知道输出结果如何。
答案 1 :(得分:0)
此材料来自日志模块的标准文档,讨论logging.basicConfig
:
注意:在启动其他线程之前,应该从主线程调用此函数。在2.7.1和3.2之前的Python版本中,如果从多个线程调用此函数,则可能(在极少数情况下)将处理程序多次添加到根记录器,从而导致意外结果(如消息)被复制在日志中。
如果从主程序线程以外的某个线程调用它,则可能是问题所在。我知道这应该是一个评论,但我没有足够的声誉。
答案 2 :(得分:0)
使用
在logging.info()
来电之前设置断点
import pdb; pdb.set_trace()
当您点击断点并处于pdb
提示符时,请键入
p logging.getLogger().handlers
您应该会看到仅使用一个元素打印的列表 - StreamHandler
。如果情况并非如此,那么这就解释了为什么你要为一次logging.info()
电话获得多行。