• 理解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. 谓语是被嵌在方括号中,都写在方括号"[]"中,表示对节点进行进一步的筛选。

 

python爬微信公众号前10篇历史文章(3)-lxml&xpath初探的更多相关文章

  1. python爬微信公众号前10篇历史文章(1)-思路概览

    作为程序员,要时刻保持一颗好奇心和想要学习的姿态. 练习怎样利用搜狗微信爬取某指定微信公众号的历史文章.爬取微信公众号本身难度非常大,感谢搜狗提供了一个可以爬取数据的平台. 代码部分参考于: http ...

  2. python爬微信公众号前10篇历史文章(4)-正则表达式RegularExpressionPattern

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. Pytho ...

  3. python爬微信公众号前10篇历史文章(6)-话说http cookies

    早期Web开发面临的最大问题之一是如何管理状态.简言之,服务器端没有办法知道两个请求是否来自于同一个浏览器.这是cookies的起源. 什么是cookie? A cookie is a small s ...

  4. python爬微信公众号前10篇历史文章(5)-JSON相关内容小结

    json - JSON encoder and decoder JSON: JavaScript object notation,是一种轻量级的数据交换格式.JSON 是 JS 对象的字符串表示法,它 ...

  5. python爬微信公众号前10篇历史文章(2)-拼接URL&发送http请求

    如何拼接想要的url http://weixin.sogou.com/weixin?type=1&page=1&ie=utf8&query=%E5%A4%A7%E7%BA%BD ...

  6. python编写微信公众号首图思路详解

    前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...

  7. Python微信公众号开发—小白篇

    本文面向想通过Python学习公众号开发的同学.一站式解决新手开发微信公众号遇到的所有问题. 为了防止我的文章被到处转载,贴一下我的公众号[智能制造专栏],欢迎大家关注. github仓库地址http ...

  8. Python微信公众号教程基础篇——收发文本消息

    1. 概述: 在本篇教程中,你将学会使用华为云弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果 ...

  9. Python微信公众号开发—小白篇(1)

    本文面向想通过Python学习公众号开发的同学.一站式解决新手开发微信公众号遇到的所有问题. 为了防止我的文章被到处转载,贴一下我的公众号[智能制造社区],欢迎大家关注. github仓库地址http ...

随机推荐

  1. day2(字符串、格式化输出、运算符、流程控制)

    一.字符串 在Python中,加了引号的字符都被认为是字符串! 单引号.双引号.多引号的区别? 单引号和 双引号没有任何区别,但是某种情况下需要单双配合 如 msg = " My name ...

  2. Elasticsearch安装使用

    在网上有很多那种ES步骤和问题的解决 方案的,不过没有一个详细的整合,和问题的梳理:我就想着闲暇之余,来记录一下自己安装的过程以及碰到的问题和心得:有什么不对的和问题希望及时拍砖. 第一步:环境 li ...

  3. shiro整合ehcache

    目标:让Shiro整合ehcache,提供缓存realm数据的功能. 1.引入encache配置文件,配置缓存 <!-- <ehcache xmlns:xsi="http://w ...

  4. 【重磅】PRO基础版免费,是时候和ExtJS说再见了!

    三石的新年礼物 9 年了,FineUI(开源版)终于迎来了她的继任者 - FineUIPro(基础版),并且完全免费!   FineUIPro(基础版)作为三石奉献给社区的一个礼物,绝对让你心动: 拥 ...

  5. Ironic中pxe driver和agent driver的区别

    历史问题: 以pxe_ipmitool 和agent_ipmitool为例,看起来似乎前者不使用ironic-python-agent,后者使用,但是实际上两者都使用ironic-python-age ...

  6. 高性能网络 SR-IOV机制--VF与PF的通信

    PF 驱动是一个专门管理SR-IOV设备全局功能驱动,而且还要配置相关共享资源.PF 驱动 随着Hypervisor 的不同而不同,一般需要具有比普通虚拟机更高的权限才能对其进行操作.PF驱动包含了所 ...

  7. CPLD/FPGA厂商概述 .

    随着可编程逻辑器件应用的日益广泛,许多IC制造厂家涉足PLD/FPGA领域.目前世界上有十几家生产CPLD/FPGA的公司,最大的三家是:ALTERA,XILINX,Lattice,其中ALTERA和 ...

  8. Win7/8出现An error occurred on the server when processing the URL解决办法

    使用的是win8系统搭建的本地服务器,win7使用的方法是相同的.如果你的系统是精简版的Win7/8,那么安装IIS7也有可能出现这问题.下面SJY带领大家来解决这个错误. 解决方法 打开控制面板→管 ...

  9. Ubuntu 卸载cario-dock

    偶然间听说别人用dock 可以把ubuntu美化,结果就装了个cairo-dock .结果是苹果mac的风格.不是很喜欢.于是就卸载,卸载过程中.发行卸载不掉. 尝试了很多方法. sudo apt-g ...

  10. ios学习笔记(一)Windows7上使用VMWare搭建iPhone开发环境

    我们都知道开发iPhone等ios平台的移动应用时需要使用Mac本,但是Mac本都比较昂贵,所以我们可以采用Windows7上利用VMWare安装Mac操作系统的方法来模拟ios开发环境,达到降低成本 ...