Webページをリンクをたどりながら検索する場合、深さ優先探索してしまうと終わりが見えないので、幅優先探索を方針とすると思います。再帰呼び出しでも書けますがFIFO(first in first out:所謂キュー)を使うと単純なループでも書けます。標準モジュールにqueueがあるのでそれを使ってもよいですが、listでもまぁ書けそうです。
大雑把な構造はこんな雰囲気でどうでしょう。(動かしてないのでおかしな点があったらご容赦)
Python
1visited = set()
2q = [ ['最初のurl'] ]
3
4while len(q) > 0:
5 url_path = q.pop(0)
6 url = url_path[-1]
7 html = urlのコンテントをgetする
8 if htmlに目的の文字列が含まれている:
9 print(url_path)
10 break
11 urls = htmlの中に含まれる外部リンク(url)のリスト
12 for url in urls:
13 if url not in visited:
14 # 未検索のurlをキューへ追加
15 visited.add(url)
16 q.append(url_path + [url])
実際の検索では
などの条件を付けたくなると思いますが、それは「キューへ追加」する際に配慮すればよいと思います。