python
  • html
  • python-2.7
  • lxml
  • 2015-07-20 105 views 1 likes 
    1

    我有字符串的HTML代碼,就像Python中獲取標記某些文本

    a = '<div>Test moree test <div> London is ... <p>mooo</p></div></div>' 
    

    我需要得到一定的文本塊,例如

    super_func("London", a) ==> '<div> London is ... <p>mooo</p></div>' 
    super_func('mooo', a) = '<p>mooo</p>' 
    

    回答

    0

    您可以使用下面的XPath查詢找到一個包含特定文本的元素,而不管元素名稱及其在HTML文檔中的位置:

    //*[contains(text(),'certain text')] 
    

    Thi s是使用lxml.html庫工作實例:

    from lxml import html 
    
    def super_func(keyword, htmldoc): 
        query = '//*[contains(text(),"{0}")]' 
        result = htmldoc.xpath(query.format(keyword)) 
        if len(result) > 0: 
         return html.tostring(result[0]) 
        else: 
         return '' 
    
    a = '<div>Test moree test <div> London is ... <p>mooo</p></div></div>' 
    doc = html.fromstring(a) 
    text = 'London' 
    print super_func(text, doc) 
    text = 'mooo' 
    print super_func(text, doc) 
    

    輸出:

    <div> London is ... <p>mooo</p></div> 
    <p>mooo</p> 
    
    相關問題