爬虫爬取百度词条
页面是随时升级的,所以现在的链接不代表以后的链接,但是万变不离其宗,只要学会解析页面,那么就能走的更远。
码云链接:https://gitee.com/ALADL/baike_spider.git
from baike_spider import url_manager,html_downloader, html_parser, html_outputer class SpiderMain(object): def __init__(self): # 初始化各个对象 self.urls = url_manager.UrlManager() # url管理器 self.downloader = html_downloader.HtmlDownloader() # 下载器 self.parser = html_parser.HtmlParser() # 解析器 self.outputer = html_outputer.HtmlOutputer() # 输出器 def craw(self, root_url): count = 1 # 将入口(root)url添加进管理器 self.urls.add_new_url(root_url) # 当管理器中有了url之后,我们就可以启动循环 while self.urls.has_new_url(): # 为了防止无效的url,这里异常处理 try: # 获取一个带爬取的url new_url = self.urls.get_new_url() # 辅助,打印一下当前 print('craw %d:%s'%(count,new_url)) # 启用下载器下载页面 html_cont = self.downloader.download(new_url) # 调用解析器解析页面,得到新的url和新的数据 new_urls,new_data = self.parser.paser(new_url,html_cont) # 分别处理,新的url添加进url管理器 self.urls.add_new_urls(new_urls) # 同时收集数据 self.outputer.collect_data(new_data) # 先爬取1000个url if count == 1000: break count += 1 except: print("craw failed") # 调用outputer来处理数据 self.outputer.output_html() if __name__ == '__main__': root_url = 'https://baike.baidu.com/item/%E8%8B%8F%E8%BD%BC/53906#hotspotmining' # main函数中复制要爬取的页面 obj_spider = SpiderMain() obj_spider.craw(root_url)