1

在网络爬虫中,对于HTML的解析,XPath是一种常用的方法。XPath 最初是用于XML中,其主要使用路径表达式在 XML 文档中进行导航。用于HTML中主要是因为HTML和XML非常的相似:它们具有类似的文件结构。都有唯一的根元素。都采用标签的方式。

同时又有点不同,XML可以自定义标签而HTML的标签是确定的XML用于描述数据(和JSON一样)而HTML用于显示数据(经过浏览器处理)。

XPath的解析需要依赖于"lxml"库。为了方便我们可以在谷歌浏览器安装XPath插件:xpath.crx 。使用xpath必须对HTML具有一定的了解。

用于网络爬虫的XPath主要使用以下语法:
image.png

练习代码如下:


#!/usr/bin/env python
# _*_ coding:utf-8 _*_

from lxml import etree

if __name__ == '__main__':

    text = '''
    <div>
        <ul>
             <li class="item-0"><a href="link1.html">first item</a></li>
             <li class="item-1"><a href="link2.html">second item</a></li>
             <li class="item-inactive"><a href="link3.html">third item</a></li>
             <li class="item-1"><a href="link4.html">fourth item</a></li>
             <li class="item-0"><a href="link5.html">fifth item</a> 
         </ul>
     </div>
    '''

    # 1.转换成 lxml文档
    html_data = etree.HTML(text)
    # 2. 格式化 了解
    html_result = etree.tostring(html_data)
    # print  html_result
    # 3.掌握的 xpath
    # 3.1取出所有的li标签
    #result = html_data.xpath('//li')
    # 3.2获取所有a
    #result = html_data.xpath('//li/a')
    # 3.3 取出内容
    #result = html_data.xpath('//li/a/text()')
    # 3.4 取出 属性的值
    result = html_data.xpath('//li[@class="item-inactive"]/a/@href')
    # 3.5 模糊查询 contains
    #result = html_data.xpath('//li[contains(@class,"1")]')
    print(result)

# .       选取当前节点。
# ..      选取当前节点的父节点。
# @       选取属性。
# *        任意匹配    //div/*  div元素下的任意元素
# //      从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
# //div   选取所有的div
# //div[@class = "my"]  选取class = "my"的div结点
# //title[@lang]  选取所有拥有名为 lang 的属性的 title 元素。
# //title[@lang=’eng’]  选取所有 title 元素,且这些元素拥有值为 en

获取演示代码,请在公众号回复 ‘xPath’ 。


莜莜@爬小虫联盟
4 声望1 粉丝