五、为HTML文档中的属性值添加引号
前面我们讨论了如果根据HTML解析器中的某种处理程序来解析HTML文件,可是有时候我们却需要使用所有的处理程序来处理HTML文档。值得庆幸的是,使用HTMLParser模块解析HTML文件的所有要素并不比处理链接或者图像难多少。
import HTMLParser
import urllib
class parseAttrs(HTMLParser.HTMLParser):
def handle_starttag(self, tag, attrs):
. . .
attrParser = parseAttrs()
attrParser.init_parser()
attrParser.feed(urllib.urlopen("test2.html").read())
这里,我们将讨论如何使用HTMLParser模块来解析HTML文件,从而为“裸奔”的属性值加上引号。首先,我们要定义一个新的HTMLParser类,以覆盖下面所有的处理程序来为属性值添加引号。
handle_starttag(tag, attrs)
handle_charref(name)
handle_endtag(tag)
handle_entityref(ref)
handle_data(text)
handle_comment(text)
handle_pi(text)
handle_decl(text)
handle_startendtag(tag, attrs)
我们还需要在parser类中定义一个函数来初始化用于存储解析好的数据的变量,同时还要定义另外一个函数来返回解析好的数据。
定义好新的HTMLParser类之后,需要创建一个实例来返回HTMLParser对象。使用我们创建的init函数初始化该解析器,这样,我们就可以使用urllib.urlopen(url)打开HTML文档并读取该HTML文件的内容了。
为了解析HTML文件的内容并给属性值添加引号,可以使用feed(data)函数将数据传递给HTMLParser对象。HTMLParser对象的feed函数将接收数据,并通过定义的HTMLParser对象对数据进行相应的解析。下面是一个具体的示例代码:
import HTMLParser
import urllib
import sys
#定义HTML解析器
class parseAttrs(HTMLParser.HTMLParser):
def init_parser (self):
self.pieces = []
def handle_starttag(self, tag, attrs):
fixedAttrs = ""
#for name,value in attrs:
for name, value in attrs:
fixedAttrs += "%s=\"%s\" " % (name, value)
self.pieces.append("<%s %s>" % (tag, fixedAttrs))
def handle_charref(self, name):
self.pieces.append("&#%s;" % (name))
def handle_endtag(self, tag):
self.pieces.append("" % (tag))
def handle_entityref(self, ref):
self.pieces.append("&%s" % (ref))
def handle_data(self, text):
self.pieces.append(text)
def handle_comment(self, text):
self.pieces.append("" % (text))
def handle_pi(self, text):
self.pieces.append("" % (text))
def handle_decl(self, text):
self.pieces.append("" % (text))
def parsed (self):
return "".join(self.pieces)
#创建HTML解析器的实例
attrParser = parseAttrs()
#初始化解析器数据
attrParser.init_parser()
#把HTML文件传给解析器
attrParser.feed(urllib.urlopen("test2.html").read())
#显示原来的文件内容
print "原来的文件\n========================"
print open("test2.html").read()
#显示解析后的文件
print "解析后的文件\n========================"
print attrParser.parsed()
attrParser.close()
我们还需要建立一个测试文件,名为test2.html,该文件内容可以从上述代码的运行结果看到,具体如下所示:
原来的文件
========================
<html>
<head>
<meta content="text/html; charset=utf-8"
http-equiv="content-type"/>
<title>Web页面</title>
</head>
<body>
<H1>Web页面清单</H1>
<a href=http://www.python.org>Python网站</a>
<a href=test.html>本地页面</a>
<img SRC=test.jpg>
</body>
</html>
解析后的文件
========================
<html>
<head >
<meta content="text/html; charset=utf-8"
http-equiv="content-type" ></meta>
<title >Web页面</title>
</head>
<body >
<h1 >Web页面清单</h1>
<a href="http://www.python.org" >Python网站</a>
<a href="test.html" >本地页面</a>
<img src="test.jpg" >
</body>
</html>
六、小结
对搜索引擎、文件索引、文档转换、数据检索、站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理。事实上,通过Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档。本文将详细介绍了如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的内容,如链接、图像和Cookie等。同时,我们还给出了一个规范HTML文件的格式标签的例子,希望本文对您会有所帮助。
分享到:
相关推荐
此外,利用Python作为开发语言,也为后续的评论文本分析和爬虫软件开发提供了坚实的技术基础。 ### 参考文献 文档列出了一系列参考文献,这些文献涵盖了网络爬虫、数据挖掘、数据库技术等多个领域,为本研究提供了...
本教程将介绍如何利用Python来自动化处理Word、Excel和PowerPoint等办公软件,以及Python在爬虫领域的应用,帮助你成为职场高手。 一、Python与Word自动化 1. `python-docx`库:这是Python中处理Word文档的主要...
根据提供的文件内容,本文将详细解释如何利用Python进行网络爬虫操作来抓取特定网站上的美女图片,并且会对代码中的关键部分进行详细说明。 ### Python爬取美女图片 #### 一、准备工作 在开始之前,我们需要确保...
`scpscraper`可能包含了各种函数和类,帮助开发者高效地抓取和解析网页内容。 Python库通常以`.tar.gz`或`.whl`等格式分发,这是常见的源代码打包方式。`.tar.gz`是一种归档格式,它首先使用`tar`工具将文件打包,...
这里我们将深入探讨如何使用Python抓取数据并将其存储到Redis的Hash数据类型中。 首先,我们需要导入必要的库,如`os`, `sys`, `requests`, `bs4`(BeautifulSoup)以及`redis`。`requests`库用于发送HTTP请求获取...
本篇文章将详细讲解如何利用Python实现一个多线程爬虫来抓取网页上的图片。 首先,我们需要理解多线程的概念。在Python中,`threading`库提供了创建和管理线程的功能。通过并发执行任务,多线程可以在同一时间处理...
Python爬虫开发与项目实战是IT领域中一个热门的话题,主要涉及如何利用Python语言来自动抓取、解析和处理互联网上的数据。在这个过程中,我们通常会涉及到以下几个关键知识点: 1. **Python基础知识**:首先,熟悉...
本压缩包文件"python爬虫之Amazon商品引流.rar"很可能是关于如何利用Python编程语言来编写爬虫程序,针对Amazon电商平台进行数据抓取的教程或代码实例。 首先,我们需要理解Python爬虫的基本概念。Python爬虫是通过...
标题中的“Python爬取电影数据-进行可视化分析利用request爬取电影数据保存在csv文本,1.zip”表明这个压缩包包含了一个使用Python编程语言进行网络爬虫的数据获取过程,目标是抓取电影相关的数据,并进行了可视化...
比如,可以利用Python模拟用户操作,实现自动挂机、自动对战等。这需要掌握如selenium、pyautogui等库,它们能够模拟键盘和鼠标操作,实现对游戏界面的控制。 在框架应用方面,Python有多个成熟的爬虫框架,如...
在Python中,开发网络爬虫经常涉及到像BeautifulSoup、Scrapy这样的库,它们提供了抓取网页内容、解析HTML和XML、处理网络请求等功能。因此,`spiderlibs`可能包含了一些定制化的工具,帮助开发者更高效地构建和运行...
在本项目中,“基于Python定向爬虫技术对微博数据可视化设计与实现”是一个关于利用Python编程语言进行数据抓取、处理和可视化的实践案例。在这个过程中,我们将探讨以下几个关键知识点: 1. **Python定向爬虫**:...
Scrapy Eagle是一个强大的Python库,专门用于扩展Scrapy框架的功能,以提高Web抓取和数据提取的效率。这个压缩包文件"scrapy_eagle-0.0.27-py3-none-any.whl"是针对Python 3版本的,表明它支持Python 3.x系列的解释...
Scrapy是一个强大的、用Python编写的网页抓取和数据提取框架,用于高效地构建和运行网络爬虫项目。它提供了丰富的功能,包括请求调度、中间件处理、爬行策略等,使得开发者可以专注于编写爬虫逻辑,而无需关心底层...
这种方法主要是利用Python内置的`urllib.parse.quote()`函数来对URL中的特殊字符(包括中文)进行编码,确保传输过程中的正确性。 - `msg.encode('utf-8')`: 将字符串转换成UTF-8编码格式,解决中文乱码问题。 - `...
标题中的“爬校花网站的爬虫”是指利用编程技术,通常是Python等语言,编写一个自动抓取特定网站上关于“校花”相关信息的程序。爬虫是互联网数据挖掘的重要工具,它能按照预设规则自动浏览网页并提取所需内容。在本...
6. **多线程/异步IO**:为了提高爬取效率,开发者可能需要利用Python的多线程或多进程,或者使用异步IO库如asyncio。 7. **分布式爬虫**:面对大规模数据时,分布式爬虫可以将任务分配到多台机器上并行处理,如...
这个课程可能着重于实际操作,通过视频教学帮助学员理解并掌握如何使用Python中的`urllib`库进行网络数据抓取和处理。 【标签】"课程资源" 指明了这些文件的用途,它们是用于教学或自我学习的材料,可能包括视频...