zoukankan      html  css  js  c++  java
  • python爬微信公众号前10篇历史文章(3)lxml&xpath初探

    • 理解lxml以及xpath

    什么是lxml?

    python中用来处理XML和HTML的library。与其他相比,它能提供很好的性能, 并且它支持XPath。 具体可以查看官方文档->http://lxml.de/index.html

    • 结构化数据:

    XML, JSON

    • 非结构化数据:

    HTML文本是最常见的数据格式,因为一般我们需要的关键信息并非直接可以得到,需要进行对HTML的解析查找,甚至一些字符串操作才能得到,所以归类于非结构化的数据处理中。

    常见解析方式如下: XPath、CSS选择器、正则表达式

    python lxml库可以使用elements来创建XML/HTML结构, 也可以从XML/HTML结构中解析出想要的信息。

    创建HTML结构

    1. 导包, etree用来创建元素和结构

    from lxml import etree

    2. 使用 Element class API 来创建多个元素。元素也被称作结点。

    root = etree.Element('html')

    3.XML/HTML结构遵循父亲-儿子范例,一个结点可以是其他结点的父亲或者儿子。在lxml中要创建这种关系可以使用etree模块下的SubElement。

    In [5]: etree.SubElement(root, 'head')
    Out[5]: <Element head at 0x7f43a5c51e60>
     
    In [6]: etree.SubElement(root, 'body')
    Out[6]: <Element body at 0x7f43a5c51f38>
     
    In [7]: print etree.tostring(root)
    <html><head/><body/></html>

    4 每个结点有很多属性

    解析HTML结构

    1 使用 lxml 的 etree 库,然后利用 etree.HTML解析

    In [19]: import requests
    In [20]: from lxml import etree
    In [21]: page = requests.get('http://www.cnn.com')
    In [22]: html_content = etree.html(page.text)

    当我们获得一个etree结构时,接下来需要用到XPath去定位信息。 它有特定的表达式去选择结点或者一组特定结点。

    XPath 

    XPath(XML Path Language)是XML路径语言,它是一种用来定位XML文档中某部分位置的语言。

    表达式描述
    / 从根节点选取。
    nodename 选取此节点的所有子节点。
    // 从当前节点 选择 所有匹配文档中的节点
    . 选取当前节点。
    .. 选取当前节点的父节点。
    @ 选取属性。
    • 每个结点类型是一种灵活的容器对象,用于在内存中存储结构化数据。

      每个结点对象都具有以下属性:

      1. tag:string对象,标签,用于标识该元素表示哪种数据(即元素类型)。

      2. attrib:dictionary对象,表示附有的属性。

      3. text:string对象,表示element的内容。

      4. tail:string对象,表示element闭合之后的尾迹。

    <tag attrib1=1>text</tag>tail
    1     2        3         4

    谓语条件(Predicates)

    1. 谓语用来查找某个特定的信息或者包含某个指定的值的节点。

    2. 所谓"谓语条件",就是对路径表达式的附加条件

    3. 谓语是被嵌在方括号中,都写在方括号"[]"中,表示对节点进行进一步的筛选。

     
  • 相关阅读:
    固定资产取得流程
    ABAP Debug
    记录下XPO生成的SQL语句
    XPO Classes Comparison
    XPO to Database Connectivity: Mastering Fork Etiquett
    使用XPO连接高于5.2.5.0版本的MySQL
    XPO:Session管理与缓存测试篇
    XPO:Session管理与缓存机制篇
    封了一个XPO初始化类
    如何在XPO中为非主键字段获取Int型自增量
  • 原文地址:https://www.cnblogs.com/duwenlu/p/8481750.html
Copyright © 2011-2022 走看看