Udacityのコンピューターサイエンス入門では、pythonをベースとしてwhile文やfor文を学習しますが制作目標として検索エンジンを作成することです。この講座では実際に開発も行うために実践的ともいえます。
他にはweb開発のためにflask等も必要ですので実際に検索エンジンが作成できたらこのブログで載せてみようと思っています。
def get_next_target(page):
start_link = page.find('<a href=')
start_qvote = page.find('"',start_link)
end_qvote = page.find('"',start_qvote + 1)
url = page[start_qvote:end_qvote]
return url,end_qvote
def print_all_links(page):
while True:
url,endpos = get_next_target(page)
if url:
print(url)
page = page[endpos:]
else:
return 0
#webクローラーの作成def get_page(url):
try:
import urllib.request
return urllib.request.urlopen(url).read()
except:
return ""
def get_next_target(page):
start_link = page.find('<a href=')
if start_link == -1:
return None,0 start_qvote = page.find('"',start_link)
end_qvote = page.find('"',start_qvote + 1)
url = page[start_qvote + 1:end_qvote]
return url,end_qvote
def union(p,q):
for e in q:
if e not in p:
p.append(e)
def get_all_links(page):
links = []
while True:
url,endpos = get_next_target(page)
if url:
links.append(url)
page = page[endpos:]
else:
break return links
#深さ優先探索def crawl_web(seed):
tocrawl = [seed]
crawled = []
while tocrawl:
page = tocrawl.pop()
if not page in crawled:
union(tocrawl,get_all_links(get_page(page)))
crawled.append(page)
return crawled
def add_to_index(index,keyword,url):
for entry in index:
if entry[0] == keyword:
entry[1].append(url)
return index.append([keyword,[url]])
def lookup(index,keyword):
for entry in index:
if entry[0] == keyword:
return entry[1]
return []
def add_page_to_index(index,url,content):
words = content.split()
for word in words:
add_to_index(index,word,url)
def crawl_web(seed):
tocrawl = [seed]
crawled = []
index = []
while tocrawl:
page = tocrawl.pop()
if page not in crawled:
content = get_page(page)
add_page_to_index(index,page,content)
union(tocrawl,get_all_links(content))
crawled.append(page)
return index
webスクレイピング同様に簡潔な検索エンジンはweb開発の初級として最適解かもしれません。ぜひ興味ある人はUdacityのコンピューターサイエンス入門で検索エンジンの開発法を学んでください
Intro to Computer Science