class Crawler1(object):
def __init__(self):
'constructor'
self.visited = []
self.will_visit = []
def reset(self):
'reset the visited links'
self.visited = []
self.will_visit = []
def crawl(self, url, n):
'crawl to depth n starting at url'
self.analyze(url)
if n < 0:
self.reset()
elif url in self.visted:
self.crawl(self.will_visit[-1],n-1)
else:
self.visited.append(url)
self.analyze(url)
self.visited.append(url)
self.will_visit.pop(-1)
self.crawl(self.will_visit[-1],n-1)
def analyze(self, url):
'returns the list of URLs found in the page url'
print("Visiting", url)
content = urlopen(url).read().decode()
collector = Collector(url)
collector.feed(content)
urls = collector.getLinks()
for i in urls:
if i in self.will_visit:
pass
else:
self.will_visit.append(i)
このプログラムに一連のリンクを実行させたいが、「n」が許す範囲でのみ実行したい
コードの何が問題なのかはわかりませんが、それで十分だと確信しています。いくつかのヒントはいいでしょう。
n = 1 で、Site1 に Site2 と Site3 へのリンクがある場合の期待される出力:
Visiting [Site1]
Visiting [Site2]
Visiting [Site3]