#!/usr/bin/env python# -*- coding: utf-8 -*-import requestsfrom bs4 import BeautifulSoupimport bs4import lxmldef have_next(ele): try: ele.next() except: return False return Truedef is_child(child, father): if child in father: return True seek_list = father.contents for i in seek_list: if isinstance(i, bs4.element.NavigableString): pass elif child in i: return True else: flag = is_child(child, i) if flag == True: return True return Falsedef get_content_between_tables(pre, nxt): #如果第二個table在第一個裡面 txt = "" if is_child(nxt, pre): cur = pre.next_element while cur != nxt and cur is not None: if isinstance(cur, bs4.element.NavigableString): txt += cur cur = cur.next_element #類似並列關係 else: #先找到pre結束的下一個元素 cur = pre.next_element while is_child(cur, pre): cur = cur.next_element #擷取內容 while cur != nxt and cur is not None: if isinstance(cur, bs4.element.NavigableString): txt += cur cur = cur.next_element return txthtml = BeautifulSoup("""<div class="c">abc<a><b>123</b></a><c>234</c></div>""", 'lxml')div = html.find('div')txt = get_content_between_tables(div, html.find('c'))print txt