经过前面(一)、(二)、(三)的讲解,现在crawler项目能运行了,控制台会打印各种日志信息,由于信息太多,根本看不全(控制台只能显示一部分),所以首要任务是将日志信息输出到文件中(crawl.py):
logging.basicConfig(filename='crawler.log',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=levels[min(args.level, len(levels)-1)])
配置以后,会将控制台的日志信息输出到crawler.log文件中,再次运行程序:
python crawl.py xkcd.com
运行到后面时,控制台会报一个错:
因为现在的session.close()是一个coroutine(协程),所以不能直接调用,而要用协程的方式运行(crawling.py):
def close(self):
"""Close resources."""
self.loop.run_until_complete(self.session.close())
# self.session.close()
# self.loop.close() 可以关闭,但关闭后loop就不能再用了
程序修改到这里,运行基本没有问题了,但是怎么查看抓取的结果呢?比如说我请求了多少个网页,请求失败了多少网页?在crawl.py中默认通过
crawl.py:100行: reporting.report(crawler)
上面代码将抓取的结果形成一个报告,打印到控制台。因为信息很多,所以我们在控制台也只能看见一少部分,这显然不是我们想要的结果。我们需要将打印报告输出到文件中(crawl.py):
f = open("report.txt","w")
reporting.report(crawler,file=f)
f.close()
crawler.close()
上面代码会将结果报告输出到report.txt文件中。
至此,crawler.py项目已经跑得顺畅了,走到这一步并不容易,基本都是在改bug(主要是python更新快,API使用有些变化所致)。先把完整的代码放出来,下一步将开始完善相关功能。