python xpath 简单过滤

Posted on Posted in python

> python xpath

- 安装lxml库
- from lxml import etree
- selector = etree.HTML(网页源代码)
- selector.xpath(xpath过滤规则)

> xpath 规则

- // 定位根节点
- / 往下层寻找
- /text() 提取文本内容
- /@xxxx 提取属性内容

> 例子

  1. #! /usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3.   
  4. from lxml import etree  
  5. import sys  
  6. reload(sys)  
  7. sys.setdefaultencoding('utf-8')  
  8.   
  9. html = ''' 
  10. <html> 
  11. <head> 
  12. <title>标题</title> 
  13. </head> 
  14. <body> 
  15. <div id="content"> 
  16.     <ul id="usefull"> 
  17.         <li>内容1</li> 
  18.         <li>内容2</li> 
  19.         <li>内容3</li> 
  20.     </ul> 
  21.     <ul id="useless"> 
  22.         <li>内容4</li> 
  23.         <li>内容5</li> 
  24.         <li>内容6</li> 
  25.         <li>内容7</li> 
  26.         <li>内容8</li> 
  27.     </ul> 
  28.     <div id="url"> 
  29.         <a href="http://abc.com">abc</a> 
  30.         <a href="http://abc.com/abc" title="abc">abc2</a> 
  31.     </div> 
  32. </div> 
  33. </body> 
  34. </html> 
  35. '''  
  36. # 提取文本  
  37. selector = etree.HTML(html)  
  38. content = selector.xpath('//ul[@id="usefull"]/li/text()')  
  39. for each in content:  
  40.     print each  
  41. # 提取属性  
  42. link = selector.xpath('//a/@href')  
  43. for each in link:  
  44.     print each  
  45. title = selector.xpath('//a/@title')  
  46. print title[0]  

> 特殊用法

- starts-with(@属性名称,属性字符相同部分)

  1. <div id="test-1">  
  2. <div id="test-2">  
  3. <div id="testfault">  

- string(.) 解决标签嵌套

  1. <div id="class"> 你好  
  2.     <font color="red">世界</font>  
  3. </div>  

> 例子

  1. #! /usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3.   
  4. from lxml import etree  
  5. import sys  
  6. reload(sys)  
  7. sys.setdefaultencoding('utf-8')  
  8.   
  9. html1 = ''' 
  10. <html> 
  11. <head> 
  12. <title>标题</title> 
  13. </head> 
  14. <body> 
  15.     <div id="content-1">内容1</div> 
  16.     <div id="content-1">内容1</div> 
  17.     <div id="contentabc">内容1</div> 
  18. </body> 
  19. </html> 
  20. '''  
  21.   
  22. html2 = ''' 
  23. <html> 
  24. <head> 
  25. <title>标题</title> 
  26. </head> 
  27. <body> 
  28. <div id="test"> 
  29.     a 
  30.     <span id="b"> 
  31.         b 
  32.         <ul>c 
  33.             <li>d</li> 
  34.         </ul> 
  35.     </span> 
  36.     e 
  37. </div> 
  38. </body> 
  39. </html> 
  40. '''  
  41. selector = etree.HTML(html1)  
  42.   
  43. content = selector.xpath('//div[starts-with(@id,"content")]/text()')  
  44. print content  
  45. for each in content:  
  46.     print type(each)  
  47.   
  48. selector2 = etree.HTML(html2)  
  49. content_1 = selector2.xpath('//div[@id="test"]')[0]  
  50. info = content_1.xpath('string(.)')  
  51. content_2 = info.replace('\n','').replace(' ','')  
  52. print content_2  
» 转载请注明来源:若我若鱼 » python xpath 简单过滤

Leave a Reply

Your email address will not be published. Required fields are marked *

1 + two =