from baike_spider import html_downloaderfrom baike_spider import html_outputerfrom baike_spider import html_parserfrom baike_spider import url_managerclass SpiderMain:# 这里定义SpiderMain类的一些属性。这样就可以创建对象后直接调用。 def __init__(self): self.urls = url_manager.UrlManager() self.downloader = html_downloader.HtmlDownloader() self.parser = html_parser.HtmlParser() self.outputer = html_outputer.HtmlOutputer()# 正式的craw爬取主函数。 def craw(self, root_url): count = 1 self.urls.add_new_url(root_url)# 把根url添加到new_url列表,这应该没什么问题。 for x in range(1000):# 1000随意改。不过单线程比较慢。之后会讲解异步爬取和多线程的。 try: new_url = self.urls.get_new_url() # 添加单个url print('craw%d : %s' %(count, new_url)) html_cont = self.downloader.download(new_url) new_urls,new_data = self.parser.parser(new_url, html_cont) self.urls.add_new_urls(new_urls) # 添加批量url self.outputer.collect_data(new_data) except AttributeError: print('here is a bug, jump') count = count+1 self.outputer.output_data() # 就这里报错# 主程序的入口。 只要是看到 if __name__ =="__mian__": , 就是整个程序从这里开始的地方。在这里调用各种方法。if __name__=="__main__": # root_url = "http://baike.baidu.com/item/Python" " root_url = "http://baike.baidu.com/item/Python" obj_spider = SpiderMain() obj_spider.craw(root_url)
添加回答
举报
0/150
提交
取消