1.Requests
第三方的python HTTP库,其口号是“让HTTP服务人类(HTTP for Humans)”,功能丰富,接口简洁优雅,文档也很完备。支持python 2.6-3.5
安装
通过 pip 安装:
pip install requests
示例:
获取某个网页
import requests
r = requests.get('http://www.baidu.com')
传递URL参数
读取服务器响应的内容
访问 r.text 时,Requests 会基于 HTTP 头部对响应的编码作出推测,大多数时候都能自动无缝解码。你可以查看它使用了什么编码,并通过 r.encoding 属性来改变它:
2.HTML
HTML 指的是超文本标记语言(Hyper Text Markup Language),是用来描述网页的一种语言,它使用一套标记标签(markup tag)来描述网页。
- HTML 文档描述网页
- HTML 文档包含 HTML 标签和纯文本
- HTML 文档也被称为网页
Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容。
示例
<html>
<body>
<h1>这是标题</h1>
<p>
这是一段话
<a href="http://www.crossincode.com">这是链接</a>
<img src="图片地址.jpg" width="104" height="142" />
</p>
</body>
</html>
- <html> 与 </html> 之间的文本描述网页
- <body> 与 </body> 之间的文本是可见的页面内容
- <h1> 与 </h1> 之间的文本被显示为标题
- <p> 与 </p> 之间的文本被显示为段落
- <a> 标签显示为一个超链接
- <img> 标签显示为一张图片
3.XPath
XPath 即为 XML 路径语言,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath 基于 XML 的树状结构,提供在数据结构树中找寻节点的能力。
由于 HTML 页面也是 XML 文档的一种,所以同样适用 Xpath。
基本语法规则
XPath 通过"路径表达式"(Path Expression)来选择节点。在形式上,"路径表达式"与传统的文件系统非常类似。
- 斜杠(/)作为路径内部的分割符。
- 同一个节点有绝对路径和相对路径两种写法。
- 绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。
- 相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step,也就是不使用"/"起首。
常用路径表达式:
- nodename(节点名称):表示选择该节点的所有子节点
- "/":表示选择根节点
- "//":表示选择任意位置的某个节点
- "."表示当前节点。
- ".."表示当前节点的父节点
- "@": 表示选择某个属性
示例
用以下 XML 文档为例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
常见表达式及结果
路径表达式 | 结果 |
---|---|
bookstore | 选取 bookstore 元素的所有子节点。 |
/bookstore | 选取根元素 bookstore。假如路径起始于正斜杠(/),则此路径始终代表到某元素的绝对路径! |
bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 |
//book | 选取所有 book 子元素,而不管它们在文档中的位置。 |
bookstore//book | 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。 |
//@lang | 选取名为 lang 的所有属性。 |
高级规则
路径表达式 | 结果 |
---|---|
//title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 |
/bookstore/book/price/text() | 选取属于 bookstore 子元素的 book 元素的 price 节点中的所有文本。 |
/bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
/bookstore/* | 选取 bookstore 元素的所有子元素。 |
//title[@*] | 选取所有带有属性的 title 元素。 |
/bookstore/book/title | //price | 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。 |
4.lxml
lxml 是一个支持 Xpath 语法的 Python 解析库。该库常用的 XML 处理功能都在 lxml.etree 中。
安装
通过 pip
安装(推荐):
pip install lxml
常用方法
解析 HTML 文档,接受的参数为字符串,返回值为 Element 对象:
使用tag属性,获取节点的名称:
使用 tostring 方法输出节点内容,参数为 Element 对象:
通过 XPath 方式访问文本内容:
5.调试代码
当程序没有按照预期运行时,需通过调试(debug)来修正程序。常用的方法是:
- 在程序中增加输出。开发过程中应多使用 print 语句,以便了解程序的运行路径和变量的值。
- 使用断点调试。断点(break point)是指在代码中指定位置,当程序运行到此位置时变中断下来,并让开发者可查看此时各变量的值。因断点中断的程序并没有结束,可以选择继续执行。绝大多数 IDE 都支持断点调试。