`
liuxinglanyue
  • 浏览: 564697 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用Python抓取和解析网页(二)补充

阅读更多

五、为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的动态网页评价爬虫算法.pdf

    此外,利用Python作为开发语言,也为后续的评论文本分析和爬虫软件开发提供了坚实的技术基础。 ### 参考文献 文档列出了一系列参考文献,这些文献涵盖了网络爬虫、数据挖掘、数据库技术等多个领域,为本研究提供了...

    用Python自动办公,做职场高手补充教程.docx

    本教程将介绍如何利用Python来自动化处理Word、Excel和PowerPoint等办公软件,以及Python在爬虫领域的应用,帮助你成为职场高手。 一、Python与Word自动化 1. `python-docx`库:这是Python中处理Word文档的主要...

    python爬取美女图片

    根据提供的文件内容,本文将详细解释如何利用Python进行网络爬虫操作来抓取特定网站上的美女图片,并且会对代码中的关键部分进行详细说明。 ### Python爬取美女图片 #### 一、准备工作 在开始之前,我们需要确保...

    Python库 | scpscraper-0.2.3.tar.gz

    `scpscraper`可能包含了各种函数和类,帮助开发者高效地抓取和解析网页内容。 Python库通常以`.tar.gz`或`.whl`等格式分发,这是常见的源代码打包方式。`.tar.gz`是一种归档格式,它首先使用`tar`工具将文件打包,...

    Python 抓取数据存储到Redis中的操作

    这里我们将深入探讨如何使用Python抓取数据并将其存储到Redis的Hash数据类型中。 首先,我们需要导入必要的库,如`os`, `sys`, `requests`, `bs4`(BeautifulSoup)以及`redis`。`requests`库用于发送HTTP请求获取...

    Python之多线程爬虫抓取网页图片的示例代码

    本篇文章将详细讲解如何利用Python实现一个多线程爬虫来抓取网页上的图片。 首先,我们需要理解多线程的概念。在Python中,`threading`库提供了创建和管理线程的功能。通过并发执行任务,多线程可以在同一时间处理...

    Python爬虫开发与项目实战《PPT文档》

    Python爬虫开发与项目实战是IT领域中一个热门的话题,主要涉及如何利用Python语言来自动抓取、解析和处理互联网上的数据。在这个过程中,我们通常会涉及到以下几个关键知识点: 1. **Python基础知识**:首先,熟悉...

    python爬虫之Amazon商品引流.rar

    本压缩包文件"python爬虫之Amazon商品引流.rar"很可能是关于如何利用Python编程语言来编写爬虫程序,针对Amazon电商平台进行数据抓取的教程或代码实例。 首先,我们需要理解Python爬虫的基本概念。Python爬虫是通过...

    Python爬取电影数据-进行可视化分析利用request爬取电影数据保存在csv文本,1.zip

    标题中的“Python爬取电影数据-进行可视化分析利用request爬取电影数据保存在csv文本,1.zip”表明这个压缩包包含了一个使用Python编程语言进行网络爬虫的数据获取过程,目标是抓取电影相关的数据,并进行了可视化...

    Python爬虫教程+游戏+框架全套源码课件+96套视频教

    比如,可以利用Python模拟用户操作,实现自动挂机、自动对战等。这需要掌握如selenium、pyautogui等库,它们能够模拟键盘和鼠标操作,实现对游戏界面的控制。 在框架应用方面,Python有多个成熟的爬虫框架,如...

    Python库 | spiderlibs-0.0.13-py3.6.egg

    在Python中,开发网络爬虫经常涉及到像BeautifulSoup、Scrapy这样的库,它们提供了抓取网页内容、解析HTML和XML、处理网络请求等功能。因此,`spiderlibs`可能包含了一些定制化的工具,帮助开发者更高效地构建和运行...

    基于Python定向爬虫技术对微博数据可视化设计与实现.zip

    在本项目中,“基于Python定向爬虫技术对微博数据可视化设计与实现”是一个关于利用Python编程语言进行数据抓取、处理和可视化的实践案例。在这个过程中,我们将探讨以下几个关键知识点: 1. **Python定向爬虫**:...

    Python库 | scrapy_eagle-0.0.27-py3-none-any.whl

    Scrapy Eagle是一个强大的Python库,专门用于扩展Scrapy框架的功能,以提高Web抓取和数据提取的效率。这个压缩包文件"scrapy_eagle-0.0.27-py3-none-any.whl"是针对Python 3版本的,表明它支持Python 3.x系列的解释...

    Python库 | scrapy-coco-0.1.1.tar.gz

    Scrapy是一个强大的、用Python编写的网页抓取和数据提取框架,用于高效地构建和运行网络爬虫项目。它提供了丰富的功能,包括请求调度、中间件处理、爬行策略等,使得开发者可以专注于编写爬虫逻辑,而无需关心底层...

    解决Python发送Http请求时,中文乱码的问题

    这种方法主要是利用Python内置的`urllib.parse.quote()`函数来对URL中的特殊字符(包括中文)进行编码,确保传输过程中的正确性。 - `msg.encode('utf-8')`: 将字符串转换成UTF-8编码格式,解决中文乱码问题。 - `...

    爬校花网站的爬虫

    标题中的“爬校花网站的爬虫”是指利用编程技术,通常是Python等语言,编写一个自动抓取特定网站上关于“校花”相关信息的程序。爬虫是互联网数据挖掘的重要工具,它能按照预设规则自动浏览网页并提取所需内容。在本...

    爬虫开发教程.zip00000000001

    6. **多线程/异步IO**:为了提高爬取效率,开发者可能需要利用Python的多线程或多进程,或者使用异步IO库如asyncio。 7. **分布式爬虫**:面对大规模数据时,分布式爬虫可以将任务分配到多台机器上并行处理,如...

    1234课程介绍6.zip

    这个课程可能着重于实际操作,通过视频教学帮助学员理解并掌握如何使用Python中的`urllib`库进行网络数据抓取和处理。 【标签】"课程资源" 指明了这些文件的用途,它们是用于教学或自我学习的材料,可能包括视频...

Global site tag (gtag.js) - Google Analytics