1. 程式人生 > 其它 >爬蟲--lxml獲取節點所有子節點的文字

爬蟲--lxml獲取節點所有子節點的文字

原文:

https://blog.csdn.net/qq_26235879/article/details/113090603

https://blog.csdn.net/weixin_33902301/article/details/118046434

from lxml import etree


def get_all_child_node_text():
    txt = """
    <div class="content">
        <p>輸入只有一行半徑r.</p>
    </div>
    <div class="content">
        <p>輸出有多行,每一行是跟輸入對應面積.</p>
        <p>輸出保留6位小數</p>
    </div>
    
""" html = etree.HTML(txt) contents = html.xpath('//div[@class="content"]') lst = [] for e in contents: # 第一種方式,通過使用xpath的string()方法 # string(.)中的.代表當前節點 # lst.append(e.xpath('string(.)').strip()) # ['輸入只有一行半徑r.', '輸出有多行,每一行是跟輸入對應面積.\n 輸出保留6位小數'] #
lst.append(e.xpath('string(.)')) # ['\n 輸入只有一行半徑r.\n ', '\n 輸出有多行,每一行是跟輸入對應面積.\n 輸出保留6位小數\n '] # lst.append(e.xpath('string(.)').replace('\n', '').strip()) # ['輸入只有一行半徑r.', '輸出有多行,每一行是跟輸入對應面積. 輸出保留6位小數'] # 第二種方式使用lxml節點自帶的方法itertext()
# lst.append(''.join(e.itertext())) # ['\n 輸入只有一行半徑r.\n ', '\n 輸出有多行,每一行是跟輸入對應面積.\n 輸出保留6位小數\n '] lst.append(''.join(e.itertext()).replace('\n', '').strip()) # ['輸入只有一行半徑r.', '輸出有多行,每一行是跟輸入對應面積. 輸出保留6位小數'] print(lst) if __name__ == '__main__': get_all_child_node_text()
View Code