从0开始学爬虫3之xpath的介绍和使用

从0开始学爬虫3之xpath的介绍和使用

Xpath:一种HTML和XML的查询语言,它能在XML和HTML的树状结构中寻找节点

安装xpath:

pip install lxml

HTML

超文本标记语言(HyperText Mark-up Language),是一种规范,一种标准,是构成网页文档的主要语言

URL

统一资源定位器(Uniform Resource Locator),互联网上的每个文件都有一个唯一的URL,它包含的信息之处文件的位置以及浏览器应该怎么处理它

Xpath的使用语法:

获取文本:

//标签1[@属性1=”属性值1”]/标签2[@属性2=”属性值2”]/…/text()

获取属性值

//标签1[@属性1=”属性值1”]/标签2[@属性2=”属性值2”]/…/@属性n

使用pycharm虚拟环境安装xpath模块

Xpath使用示例

用来进行xpath测试的网页 static/index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>网页测试</title>
    <link rel="stylesheet" href="">
</head>
<body>
    <h3>标题</h3>
    <ul>
        <li>内容1</li>
        <li>内容2</li>
        <li class="important">内容3important</li>
        <li>内容4</li>
        <li>内容5</li>

    </ul>
    <div>
        内容未知
    </div>
    <p>
        段落内容 from p
    </p>
    <div id="container">
        段落文字
        <a href="http://www.baidu.com" title="超链接">跳转到百度首页</a>
        <p class="content">
            区块内容1
        </p>
        <p class="content">
            区块内容2
        </p>
        <p class="content">
            区块内容3
        </p>
        <p class="content">
            区块内容4
        </p>
        <p class="content-block">
            区块内容5 from block
        </p>
        <p class="content-block">
            区块内容6 末尾内容
        </p>
        <a href="http://www.so.com" title="超链接">跳转到360搜索首页</a>
    </div>
    <p>
        最后一段文字
    </p>
</body>
</html>

xpath使用示例

#coding=utf-8
from lxml import html

def parse():
    """将html文件中的内容,使用xpath进行提取"""
    # 读取文件中的内容
    f = open('./static/index.html', 'r', encoding='utf-8')
    s = f.read()

    selector = html.fromstring(s)
    # 解析H3标题
    h3 = selector.xpath('/html/body/h3/text()')
    print(h3[0])
    # 解析ul下面的内容
    # ul = selector.xpath('/html/body/ul/li')
    # 双斜线语法
    ul = selector.xpath("//ul/li")
    print(len(ul))
    for li in ul:
        print(li.xpath('text()')[0])

    # 解析ul指定的元素值
    ul2 = selector.xpath('/html/body/ul/li[@class="important"]/text()')
    print(ul2)

    # 解析a标签的内容,拆分的方式
    # a = selector.xpath('//div[@id="container"]/a')
    # 标签内的内容
    # print(a[0].xpath("text()")[0])
    # 得到标签的属性
    # print(a[0].xpath("@href")[0])
    # div[id="container"] 的第二个a标签内容
    # print(a[1].xpath("text()"))
    # print(a[1].xpath("@href")[0])

    # 解析a标签的内容,一次性解析的方式
    a1 = selector.xpath('//div[@id="container"]/a/text()')
    # 标签内容
    print(a1[0])
    # 标签数学
    alink = selector.xpath('//div[@id="container"]/a/@href')
    print(alink[0])

    # 解析p标签
    p = selector.xpath('/html/body/p[last()]/text()')
    print(p[0])
    f.close()

if __name__ == "__main__":
    parse()

当我们在页面中找不到xpath的时候可以使用chrome的copy xpath进行参考

原文地址:https://www.cnblogs.com/reblue520/p/11150316.html