简单的标签搜索

作者: 布拉豆 | 来源:发表于2019-07-21 11:21 被阅读0次

工具

  • Python3版本
  • lxml库【优点是解析快】
  • HTML代码块【从网络中获取或者自己杜撰一个】
  • requests【推荐安装,从网页上获取网页代码练手,再好不过了】

讲解

网页代码都是成对的标签,基础结构如下

<!DOCTYPE html>
<html lang="en">
<head>
    <!--网页头部信息-->
    <title>网页名</title>
</head>
<body>
    <!--下面是网页正文-->
    <div>
        div-text
    </div>
</body>
</html>
  • 最外部肯定是html,所有的html代码基本都是放这里面
  • html内部分两块,一块是头head,另一块是身体body
  • head部主要是放网页名、一些申明、和SEO优化的东西
  • body部分就是浏览器显示的内容

网页结构基本都是如此,一般有价值的数据都是在body中

现在开始学习Xpath

  • 第一步:杜撰一个HTML代码块
html_str = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网页名</title>
</head>
<body>
    <div>
        div-text
        <span>span-text</span>
        <a>a-text</a>
        <p>p-text</p>
    </div>
    <table>
        <tr>
            <th>Heading</th>
            <th>Another Heading</th>
        </tr>
        <tr>
            <td>row 1, cell 1</td>
            <td>row 1, cell 2</td>
        </tr>
        table-text-2
    </table>
</body>
</html>
"""
  • 第二步:检测Python和lxml库
from lxml import etree
html = etree.HTML(html_str)

这段代码是从lxml中导入etree,然后将前面杜撰的一个html_str字符串通过etree.HTML函数,解析成支持xpath的数据类型,并保存到html变量中

两段代码链接起来,成功运行,那就说明lxml库正常

下面就到了写 xpath 路径的时候了

  • 任务一:解析出head里面的title标签的值【即 ‘网页名’】

    • 获取网页名的值,是使用title/text()来获得,
    • title标签是head的子级
    • head标签就是最外部的标签
    • 所以整个的xpath路径是head/title/text()
    • 最后的python代码就是print(html.xpath('head/title/text()'))。这样就打印出了一个列表['网页名']
  • 任务二:解析出div标签下spanap标签里面的值

    • span标签值对应的xpath路径是body/div/span/text(),结果['span-text']
    • a标签值对应的xpath路径是body/div/a/text(),结果['a-text']
    • p标签值对应的xpath路径是body/div/p/text(),结果['p-text']
  • 任务三:试着解析div标签的text()

    • 就任务而言,任务三比任务二还轻松点,能获取div的子级标签值,获取父级也挺简单
    • div对应的xpath路径是body/div/text()
    • 得到的结果是这样的['\n div-text\n ', '\n ', '\n ', '\n ']
    • 这里必须对结果好好解释下。首先是div里面有三个子级标签,这三个都不算做text()。如果没有子级,得到的结果列表就是一个元素;有两个子级,则列表有三元素;就像一根面条被切了两次,就有三根面条出现。【不是对着切(ˉ▽ ̄~) ~~】
    • 另外 /n是换行
  • 任务四:解析thtd的文本值

    • 这次thtd都有两个标签,首先按前面的方式来写路径
    • 通过body,再到table,然后是tr,再是thtd
    • 最终的xpath是body/table/tr/th/text()body/table/tr/td/text()
    • 运行结果['Heading', 'Another Heading']['row 1, cell 1', 'row 1, cell 2']

最终的代码和运行截图

html_str = """
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>网页名</title>
</head>
<body>
    <div>
        div-text
        <span>span-text</span>
        <a>a-text</a>
        <p>p-text</p>
    </div>
    <table class="2">
        <tr>
            <th>Heading</th>
            <th>Another Heading</th>
        </tr>
        <tr>
            <td>row 1, cell 1</td>
            <td>row 1, cell 2</td>
        </tr>
        table-text-2
    </table>
</body>
</html>
"""

from lxml import etree

html = etree.HTML(html_str)
print(html.xpath('head/title/text()'))
print(html.xpath('body/div/span/text()'))
print(html.xpath('body/div/a/text()'))
print(html.xpath('body/div/p/text()'))
print(html.xpath('body/div/text()'))
print(html.xpath('body/table/tr/th/text()'))
print(html.xpath('body/table/tr/td/text()'))
xpath_1

!放在最后

以上就是本篇文章的全部介绍内容了

如果文章中有什么错误或者建议修改的地方,欢迎留言纠正和回复

如果你喜欢本篇文章,不妨关注一下我们的公众号,每周更新两篇原创技术文档,都是干货

微信公众号二维码美化图001.png

更多教程,传送门:Spbeen

相关文章

  • 简单的标签搜索

    工具 Python3版本 lxml库【优点是解析快】 HTML代码块【从网络中获取或者自己杜撰一个】 reques...

  • 32.LeetCode559. N叉树的最大深度.

    标签: 树 深度优先搜索 广度优先搜索 难度: 简单 题目描述 我的解法: 递归 其他解法 暂略。

  • Chrome插件-2019

    CaretTab - 新式可以显示时间和日期的标签 一个精美简单、完全可定制的新式标签页,包括多个时钟、日期、搜索...

  • iOS UILabel 创建标签

    UILabel 创建标签一般用于搜索界面的热门搜索标签快速搜索,个人信息中个人标签的展示。在有多个地方需要使用标签...

  • 34.LeetCode101. 对称二叉树

    标签: 树 深度优先搜索 广度优先搜索 难度: 简单 题目描述 我的解法 检查树的每一层(用栈保存结点)是否是...

  • masonry使用、介绍和获取自动布局后的高度

    很多时候会用到自动布局,例:分类标签、搜索页面中的热门搜索等等。 所以,简单的介绍一下: 1.masonry的自动...

  • masonry使用、介绍和获取自动布局后的高度

    很多时候会用到自动布局,例:分类标签、搜索页面中的热门搜索等等。所以,简单的介绍一下:1.masonry的自动布局...

  • 浅谈列表<ul>跟<dl>使用注意点及使

    1.无序列表标签 简单介绍: 1.1语义: 标签作用给一组类型相同的数据添加列表的语义,告诉浏览器、搜索引擎 无序...

  • css需要掌握的面试问题

    1.语义标签理解,用过那些标签 哪些标签不推荐?语义:使用具体名字来定义标签,看起来更直观,方便搜索引擎搜索用过那...

  • UITableView+FDTemplateLayoutCell

    每个App的搜索界面下边都会有热门搜索,历史搜索之类的标签,这里介绍个框架, 既可以非常容易实现标签类的不规则流式...

网友评论

    本文标题:简单的标签搜索

    本文链接:https://www.haomeiwen.com/subject/psxdtxtx.html