python爬虫之xpath

来源:互联网 发布:土豪直播软件下载 编辑:程序博客网 时间:2024/04/29 09:33

python爬虫之xpath

  • XPath是一门语言
  • XPath可以在xml文件中查找信息
  • XPath支持HTML
  • XPath通过元素和属性进行导行
  • XPath比正则表达式厉害,简单

XPath使用

要使用XPath就必须要在python中安装lxml库

  • from lxml import etree
  • selector =etree.HTML(网页源代码)
  • selector.xpath(xpath语法)

简单语法

  • // 从匹配选择的当前节点选择文档中的节点
  • /从根节点往下层寻找
  • nodename 选取此节点的所有子节点
  • . 选取当前节点
  • 提取文本内容:/text()
  • 提取属性内容:/@xxxx

特殊用法

  • 以相同的字符开头:starts-with(@属性名称,属性字符相同部分)
    更多内容请参考XPath文档
<div id="test-1">需要内容1</div><div id="test-2">需要内容1</div><div id="test-3">需要内容1</div>
  • 标签嵌套标签:string(.)
<div id="class2">美女,    <font color=red>你的微信是多少?</font></div>

基本使用

#-*-coding:utf8-*-from lxml import etreehtml = '''<!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title>测试-常规用法</title></head><body><div id="content">    <ul id="useful">        <li>这是第一条信息</li>        <li>这是第二条信息</li>        <li>这是第三条信息</li>    </ul>    <ul id="useless">        <li>不需要的信息1</li>        <li>不需要的信息2</li>        <li>不需要的信息3</li>    </ul>    <div id="url">        <a href="http://jikexueyuan.com">极客学院</a>        <a href="http://jikexueyuan.com/course/" title="极客学院课程库">点我打开课程库</a>    </div></div></body></html>'''selector = etree.HTML(html)#提取文本content = selector.xpath('//ul[@id="useful"]/li/text()')for each in content:    print each#提取属性link = selector.xpath('//a/@href')for each in link:    print eachtitle = selector.xpath('//a/@title')print title[0]

特殊使用

#-*-coding:utf8-*-from lxml import etreehtml1 = '''<!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title></title></head><body>    <div id="test-1">需要的内容1</div>    <div id="test-2">需要的内容2</div>    <div id="testfault">需要的内容3</div></body></html>'''html2 = '''<!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8">    <title></title></head><body>    <div id="test3">        我左青龙,        <span id="tiger">            右白虎,            <ul>上朱雀,                <li>下玄武。</li>            </ul>            老牛在当中,        </span>        龙头在胸口。    </div></body></html>'''selector = etree.HTML(html1)content = selector.xpath('//div[starts-with(@id,"test")]/text()')for each in content:    print eachselector = etree.HTML(html2)content_1 = selector.xpath('//div[@id="test3"]/text()')for each in content_1:    print eachdata = selector.xpath('//div[@id="test3"]')[0]info = data.xpath('string(.)')content_2 = info.replace('\n','').replace(' ','')print content_2
0 0
原创粉丝点击