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 ...
随机推荐
- c++ 如何把RGB图像转换成HSV图像?
CV_<bit_depth>(S|U|F)C<number_of_channels> 1--bit_depth---比特数---代表8bite,16bites,32bites, ...
- JS Cookie丢失问题
JS Cookie丢失问题 前些天有人问我vue中使用proxy发送请求,为什么请求时cookie丢失,首先说一下我对cookie的理解: 1.cookie在正常情况下是会在每次请求时自动携带, 2. ...
- node实现jsonp跨域
1. 搭建node server //引入模块 var http=require("http"); var fs=require("fs");var url = ...
- android/底层获取上下文对象
public class ContextUtils { private static Context applicationContext = null; public static Context ...
- 初版python计算器
作业: 使用正则表达式实现计算器功能. 实现: 1.实现带括号的计算 2.实现指数.加减乘除求余等功能 先看运行结果: 请输入您的计算式: 1 - 2 * ( (60-30 +(-40.0/5) * ...
- 实战DeviceIoControl 之五:列举已安装的存储设备
Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了.如果事先并不能确切知道设备名,如何去访问设备呢? A 访问设备 ...
- stm32之keil开发环境搭建
只要按照下面的一步步来,绝对能从0开始建立一个STM32工程.不仅包括工程建立过程,还有Jlink设置方法.本文使用芯片为STM32F103CB. 1 下载stm32F10x的官方库 http://w ...
- Error Code: 1630. FUNCTION rand.string does not exist
1.错误描述 13:50:13 call new_procedure Error Code: 1630. FUNCTION rand.string does not exist. Check the ...
- weblogic部署web项目出现错误
1.错误描述 <2015-3-15 下午02时13分01秒 CST> <Info> <Security> <BEA-090905> <Disabl ...
- Openstack_O版(otaka)部署_镜像服务glance部署
安装和配置服务 1. 建库建用户 mysql -u root -p CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO '; GRA ...