python html源码解析-lxml之etree

5 阅读1分钟
  1. 获取上一个兄弟节点
    html = etree.HTML(content)
    tr_list = html.xpath('//tr[@nowrap="nowrap"]')

    for tr in tr_list:

        # 获取上一个兄弟节点的两种方式,如下:

        # 写法1:直接在当前tr节点上用XPath获取【紧邻的前一个兄弟tr节点】(推荐,更简洁)
        prev_tr = tr.xpath('./preceding-sibling::tr[1]')[0]  # [0]取第一个(即紧邻的)

        # 写法2:lxml节点自带的getprevious()方法,获取紧邻的前一个兄弟节点(需判断节点类型是否为tr)
        prev_tr = tr.getprevious()
        if prev_tr is None or prev_tr.tag != 'tr':  # 防止前一个节点不是tr/无兄弟节点
            continue  # 无符合条件的前一个tr,跳过
  1. 获取标签内的所有源码内容

防乱码版打印

prev_tr_html = etree.tostring( prev_tr, encoding='utf-8', pretty_print=True, xml_declaration=False # 关闭XML声明头,解决特殊字符/乱码问题[参数可选] ).decode('utf-8')