Ejemplo n.º 1
0
def parse2l(url):
    '''2级页面进程池目标函数
    '''
    # 需要添加同步锁,防止第一次运行出现同时获取到第一个browser,影响效率
    Config.lock.acquire()
    ptm = Config.browser_list.get_browser()
    Config.lock.release()

    # print 'url:{0}  pid{1}'.format(url,os.getpid())

    try:
        ptm.get(url)
        # 统计所有a链接与前一个链接的文本数量差
        list_a = ptm.find_elements_by_tag_name('a')
        last_len = 0  # 初始化0
        result = []
        for a in list_a:
            cur_len = len(a.text.strip())
            if cur_len - last_len == 0:
                result.append(1)
            else:
                result.append(-1)
            # 保留当前链接文本长度
            last_len = cur_len

        if len(result):
            # 获取最大连续和
            start, end = get_max_sum.main(result)
            get_2l_by_text(start, end, list_a, url)
        # 执行完毕后设置浏览器为空闲状态
        ptm.get('data:,')
    except Exception, e:
        print '2lerror:' + url
        print e
        print traceback.format_exc()
Ejemplo n.º 2
0
def parse3l(url):
    '''三级页面url获取方式
    '''

    Config.lock.acquire()
    ptm = Config.browser_list.get_browser()
    Config.lock.release()

    ptm.get(url)

    list_a = ptm.find_elements_by_tag_name('a')
    last = ''  # 初始化0
    last_txt = ''
    result = []
    try:
        for a in list_a:
            if a.get_attribute('href'):
                try:
                    # href可能包含中文,因此捕获异常
                    # 编辑距离小于3并且两个链接的字数不能相等(过滤导航,部分站点导航的href差异很小,需要通过文本数量过滤)
                    if (distance(str(a.get_attribute('href').strip()), str(last)) < Config.edit_dist) and \
                        len(a.text.strip()) - len(last_txt) != 0:
                        result.append(1)
                    else:
                        result.append(-1)
                    # 保留上一个a链接
                    last = a.get_attribute('href').strip()
                    last_txt = a.text.strip()
                except:
                    print '3l_unicode_error:' + a.get_attribute('href')
        if len(result):
            start, end = get_max_sum.main(result)
            middle = (end - start) / 2 + start
            while middle:
                href = list_a[middle].get_attribute('href')
                if href:
                    href = urlparse.urljoin(
                        url, href).replace('../', '') + '\n'
                    Config.l_3l.append(href)
                    break
                else:
                    middle -= 1
        ptm.get('data:,')
    except Exception, e:
        print '3lerror:' + url
        print e
        print traceback.format_exc()