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)
谓语用来查找某个特定的信息或者包含某个指定的值的节点。
所谓"谓语条件",就是对路径表达式的附加条件
谓语是被嵌在方括号中,都写在方括号"[]"中,表示对节点进行进一步的筛选。
python爬微信公众号前10篇历史文章(3)-lxml&xpath初探的更多相关文章
- python爬微信公众号前10篇历史文章(1)-思路概览
作为程序员,要时刻保持一颗好奇心和想要学习的姿态. 练习怎样利用搜狗微信爬取某指定微信公众号的历史文章.爬取微信公众号本身难度非常大,感谢搜狗提供了一个可以爬取数据的平台. 代码部分参考于: http ...
- python爬微信公众号前10篇历史文章(4)-正则表达式RegularExpressionPattern
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. Pytho ...
- python爬微信公众号前10篇历史文章(6)-话说http cookies
早期Web开发面临的最大问题之一是如何管理状态.简言之,服务器端没有办法知道两个请求是否来自于同一个浏览器.这是cookies的起源. 什么是cookie? A cookie is a small s ...
- python爬微信公众号前10篇历史文章(5)-JSON相关内容小结
json - JSON encoder and decoder JSON: JavaScript object notation,是一种轻量级的数据交换格式.JSON 是 JS 对象的字符串表示法,它 ...
- python爬微信公众号前10篇历史文章(2)-拼接URL&发送http请求
如何拼接想要的url http://weixin.sogou.com/weixin?type=1&page=1&ie=utf8&query=%E5%A4%A7%E7%BA%BD ...
- python编写微信公众号首图思路详解
前言 之前一直在美图秀秀调整自己的微信公众号首图,效果也不尽如人意,老是调来调去,最后发出来的图片被裁剪了一大部分,丢失部分关键信息,十分恼火,于是想着用python写一个程序,把微信公众号首图的模式 ...
- Python微信公众号开发—小白篇
本文面向想通过Python学习公众号开发的同学.一站式解决新手开发微信公众号遇到的所有问题. 为了防止我的文章被到处转载,贴一下我的公众号[智能制造专栏],欢迎大家关注. github仓库地址http ...
- Python微信公众号教程基础篇——收发文本消息
1. 概述: 在本篇教程中,你将学会使用华为云弹性云服务器(以下简称 ECS)搭建微信公众号处理后台,使用Python语言编写对应的微信消息处理逻辑代码,接收从微信服务端转发过来的消息,并返回处理结果 ...
- Python微信公众号开发—小白篇(1)
本文面向想通过Python学习公众号开发的同学.一站式解决新手开发微信公众号遇到的所有问题. 为了防止我的文章被到处转载,贴一下我的公众号[智能制造社区],欢迎大家关注. github仓库地址http ...
随机推荐
- 合唱团 (线性dp)
题意:有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求相邻两个学生的位置编号的差不超过 d,使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积 ...
- 关键字final的用法
final关键字可以用来修饰类.方法和变量. 1.final修饰的类不能被继承. 2.final修饰的方法不能被重写. 3.final修饰的变量是常量,不能修改其值.
- 使用static与const关键字时需要掌握的知识
static:1.不考虑类,static的作用: 1)第一个作用:隐藏.使得全局变量和函数对其它文件不可见,同时避免了不同文件的命名冲突. 2)第二个作用:默认初始化为0.未初始化的全局静 ...
- 约瑟夫环-循环队列算法(曾微软,google笔试题)
这也是我们聚会时常常做的游戏之一. 算法思路: 此处我使用循环链表模拟人围城一圈,每一个结点代表一个人.链表是一个有序链表,链表结点数据域是一个整型,代表人的序号.出局等同于链表删除元素,每次出局后重 ...
- zabbix监控安装
1.关闭iptables和selinux # systemctl stop firewalld # systemctl disable firewalld # setenforce 2.安装yum源 ...
- caffe︱ImageData层、DummyData层作为原始数据导入的应用
Part1:caffe的ImageData层 ImageData是一个图像输入层,该层的好处是,直接输入原始图像信息就可以导入分析. 在案例中利用ImageData层进行数据转化,得到了一批数据. 但 ...
- xp+WinDBG+VMware调试内核
呵呵,搞点突兀的标题而已.其实说的还是如何使用WinDBG和VMware来搭建调试内核的环境而已,这些网上已经有数不清的教程了,不过我喜欢自己亲手写一下.第一,把这个过程写一遍能加深印象,就算以后忘记 ...
- Eviews 9.0新版本新功能——预测(Auto-ARIMA预测、VAR预测)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 9.预测功能 新增需要方法的预测功能:Auto ...
- eclipse怎么恢复原状
eclipse怎么恢复原状 今天,我在写JSP页面时,将eclipse缩小窗口,后来我准备恢复,但是窗口却变成下面的状态
- 利用Windows性能计数器(PerformanceCounter)监控
一.概述 性能监视,是Windows NT提供的一种系统功能.Windows NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器.性能对象,就 ...