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()
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()