pyhton算法-深度优先【以爬取网页链接中的链接为例】

深度优先算法,python中主要是用栈来实现的【栈--先进后出】

如图所示,从1开始作为根来计算,【将1,放进一个列表中[1]】然后解析1,得到的是23【将23放进队列中[2,3],1不在了的原因是在计算中1被计算完值后就拿出了列表】,然后再解析3,得到67【将6,7放进列表中[2,6,7]】,然后再解析7,6,解析2得到4,5【将45放进列表中[4,5]】,然后解析5,得到8【将8放进列表中[4,8]】然后解析8,4;结束

 

以下为栈pop方法的取数原理:

 

 

#以下为栈取数原理
a = [1,2,3]
while a:
    a.pop()
    print(a)

接下来是写的解析网页的代码【以解析www.sougou.com为例,还可以添加一些条件来结束,新手还没学会】:

import sys
import os
import requests
from bs4 import BeautifulSoup
import requests
from bs4 import BeautifulSoup
import time
def zhuaqu(rooturl):
    url_set = set()
    url_empty = []
    url_list = [rooturl]
    #当列表不为空的时候开始算
    while url_list != url_empty:
        print(url_list)
        #从列表中取数【先进后出,数会被直接拿出来】
        url = url_list.pop()
        print("正在解析:{}".format(url))
        #将已经解析过的url放进集合中
        url_set.add(url)
        try:
            #获取页面的所有链接
            html_doc = requests.get(url).content.decode()
            soup = BeautifulSoup(html_doc, 'html.parser')
            for tmp in soup.find_all('a'):
                url_1 = tmp.get("href")
                if url_1 not in url_set and "http:" in url_1:
                    url_list.append(url_1)

        #捕获所有异常,并打印出来
        except BaseException as e:
            print("无法访问{},错误信息{}".format(url,e))

rooturl = "https://www.sogou.com/"
zhuaqu(rooturl)

 

posted @ 2020-08-30 23:12  玲玲子爱学习  阅读(391)  评论(0)    收藏  举报