python爬链接后建立【关键词+网址】列表

def get_page(url):   #获取源码
    try:
        import urllib
        return urllib.urlopen(url).read()
    except:
        return ""

def get_next_target(page):   #寻找剩下的页面出现的网址
    start_link = page.find('<a href="http://')
    if start_link == -1: 
        return None, 0
    start_link=start_link-8
    start_quote = page.find('"', start_link)
    end_quote = page.find('"', start_quote + 1)
    url = page[start_quote + 1:end_quote]
    return url, end_quote

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,max_pages):  #从一个seed url开始挖,挖到一定数量停止
    tocrawl = [seed]
    crawled = []
    index = [] #update
    while tocrawl:
        page = tocrawl.pop()
        if page not in crawled and len(crawled) < max_pages: #爬到一定的页数停止,不然会一直查下去
            content = get_page(page) #get the content of the url
            add_page_to_index(index,page,content) # 把源码,网址,列表,送去处理
            union(tocrawl,get_all_links(content)) #连接未挖掘的和当前网页中的子连接
            crawled.append(page)  #已挖
    return index 

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 i in index:
        if i[0] == keyword:
           return i[1]
    return []

def add_page_to_index(index,url,content):
    words = content.split()   #分割所有的词
    for word in words:
        add_to_index(index,word,url)  #每个词和网址,拿去处理


print crawl_web("http://xkcd.com/353",2) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值