Udacityのコンピューターサイエンス入門で検索エンジンのコード

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



注目記事

[超簡単]Webライティングの始め方!

みなさん、こんにちは。中川(@ naka33321 )です。最近では副業が日本でも徐々にですが定着しつつあるなかで、副業にチャレンジしてみようという人は今では少なくないでしょう。副業は色々なやり方はあるのですが、手頃に始めやすいものはWebライティングでしょう。 デザ...

人気記事