美文网首页
Python爬虫-基于深度优先策略的百度百科爬虫

Python爬虫-基于深度优先策略的百度百科爬虫

作者: 小小佐 | 来源:发表于2017-10-27 14:38 被阅读121次

    深度优先策略:优先往纵向挖掘深入,直到到达指定的深度或者该节点不存在邻接节点,才会访问第二条路。
    广度优先策略:先访问完一个深度的所有节点,再访问更深一层的所有节点。

    分析-01.jpg

    简单的看:
    深度优先爬虫路径:A-B-E-F-C-D
    广度优先爬虫路径:A-B-C-D-E-F

    import requests
    import re
    import time
    
    exist_urls=[]
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36',
    }
    #定义一个用来获取页面所有符合条件的链接函数
    def scrapypy(url):
        try:
            response=requests.get(url=url,headers=headers)
            response.encoding='UTF-8'
            html=response.text
            link_lists=re.findall('.*?<a target=_blank href="/item/([^:#=<>]*?)".*?</a>',html)
            return link_lists
        except Exception as e:
            print(e)
            print('下载失败:'+url)
            return None
        finally:
            exist_urls.append(url)
    
    #主函数用来定义输出格式,当爬取深度小于三层时,递归调用主函数,继续爬取第二层的所有链接
    def main(start_url,depth=1):
        count=0
        link_lists=scrapypy(start_url)
        if link_lists:
            unique_lists=list(set(link_lists)-set(exist_urls))
            for unique_list in unique_lists:
                unique_list='https://baike.baidu.com/item/'+unique_list
                count=count+1
                output='No.'+str(count)+'\t Depth:'+str(depth)+'\t'+start_url+'======>'+unique_list+'\n'
                print(output)
                with open('title.txt','a+') as f:
                    f.write(output)
                    f.close()
                if depth<2:
                    main(unique_list,depth+1)
    
    if __name__=='__main__':
        t1=time.time()
     start_url='https://baike.baidu.com/item/%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91'
        main(start_url)
        t2=time.time()
        print('总时间',t2-t1)
    

    爬取深度为2时的运行结果:

    分析-01.png 分析-02.png

    另外还尝试了深度为3的爬虫,爬了六万个就提示写不进去,暂且暂停了。后面继续学习广度优先的爬虫。

    相关文章

      网友评论

          本文标题:Python爬虫-基于深度优先策略的百度百科爬虫

          本文链接:https://www.haomeiwen.com/subject/zmukpxtx.html