Tidy 和 HTML 解析
Beautiful Soup
屏幕抓取:是通过程序下载网页并从中提取信息的过程。
简单来见:下载数据并对其进行分析
思路:可使用urllib来获取网页的HTML代码,再使用正则表达式从中提取信息。
例如:假设要从python Job Board(http://python.org/jobs)提取招聘单位的名称和网站。
通过查看该网站的源代码,可发现类似于下面的链接中找到名称和URL:
<a href="/jobs/1970/">Python Engineer</a>
如下:简单的屏幕抓取程序
from urllib.request import urlopen import re p = re.compile('<a href="(/jobs/\d+)/">(.*?)</a>') text = urlopen('http://python.org/jobs').read().decode() for url,name in p.findall(text): print('{}({})'.format(name,url))
以上代码需要跟进的地方:
1.正则表达式一点都不容易理解。如果HTML代码和查询更复杂,那正则表达式就难以理解和维护
2.无法处理独特的HTML内容;比如CDATA部分和实符字体(如&)
正则表达式依赖于HTML代码的细节,并不是抽象的结构;意味着只要网页的结构发生一点点变化,那这个程序可能就无效了。
针对基于正则表达式的方法存在的问题,可有两种解决方案:
(1)结合使用程序Tidy(一个python库)和XHTML解析
(2) 使用专为屏幕抓取而设计的Beautiful Soup
Tidy 和XHTML解析
Tidy是用于对格式不正确且不严谨的HTML进行修复的工具,它非常聪明,能够修复很多常见的错误,从而完成大量你不愿意做的工作。它还提供了极大的配置空间,让你能够开 / 关各种校正。
当然,Tidy并不能修复HTML文件存在的所有问题,但确实能够确保文件是格式良好的(即所有元素都嵌套正确),这让解析工作容易很多。
获取Tidy
有多个用于python的Tidy库包装器,至于哪个最新并非固定不变的,找使用pip来找出可供使用的包装器:
$pip search tidy
可选择安装PyTidyLib:
$ pip install pytidylib
并非一定要安装Tidy库包装器。如果你是用的是unix或者linux系统,很可能已经默认安装了命令行版Tidy。此外,不管使用的是什么系统,都可以从Tidy网站上获取可执行的二进制版本,有了二进制版本之后,就可以使用模块subprocess(或其他包含open函数的模块)来运行Tidy程序了。
如果python找不到tidy,可能需要提供这个可执行文件的完整路径。
XHTML 和 HTML的主要区别在于,XHTML非常严格,要求显式地结束所有的元素;
因此,在HTML可通过(使用标签<p>)开始另一个段落来结束当前段落,但在XHTML中,必须先(使用标签</p>)显式地结束当前段落。这让XHTML解析起来容易得多,因为你能清除地直到何时进入或者离开各种元素,
XHTML的另一个优点:它是一种XML方言,可食用各种出色的工具(XPath)来处理
要求对Tidy生成的格式良好的XHTML进行解析,一种非常简单的方式就是使用标准库模块html.parser中的HTMLParser类
待补充~