您的位置:首页 > 编程语言 > Python开发

利用Python抓取和解析网页(下)

2011-08-25 11:10 791 查看
转载自:http://tech.it168.com/a2009/0707/601/000000601879_1.shtml

二、从HTML文档中提取图像

  处理HTML文档的时候,我们常常需要从其中提取出所有的图像。使用HTMLParser模块后,这项任务将变得易如反掌。首先,我们需要定义一个新的HTMLParser类,以覆盖handle_starttag()方法,该方法的作用是查找img标签,并保存src属性值所指的文件。

  import HTMLParser

  import urllib

  def getImage(addr):

  u = urllib.urlopen(addr)

  data = u.read()

  class parseImages(HTMLParser.HTMLParser):

  def handle_starttag(self, tag, attrs):

  if tag
== 'img':

  for name,value
in attrs:

  if name
== 'src':

  getImage(urlString +
"/"
+ value)

  u = urllib.urlopen(urlString)

  lParser.feed(u.read())

  定义好新的HTMLParser类之后,需要创建一个实例来返回HTMLParser对象。然后,就可以使用urllib.urlopen(url)打开HTML文档并读取该HTML文件的内容了。

  为了解析HTML文件的内容并显示包含其中的图像,可以使用feed(data)函数将数据发送至HTMLParser对象。HTMLParser对象的feed函数将接收数据,并通过定义的HTMLParser对象对数据进行相应的解析。下面是一个具体的示例:

  import HTMLParser

  import urllib

  import sys

  urlString =
"http://www.python.org"

  #把图像文件保存至硬盘

  def getImage(addr):

  u = urllib.urlopen(addr)

  data = u.read()

  splitPath = addr.split('/')

  fName = splitPath.pop()

  print
"Saving %s"
% fName

  f = open(fName,
'wb')

  f.write(data)

  f.close()

  #定义HTML解析器

  class parseImages(HTMLParser.HTMLParser):

  def handle_starttag(self, tag, attrs):

  if tag
== 'img':

  for name,value
in attrs:

  if name
== 'src':

  getImage(urlString +
"/"
+ value)

  #创建HTML解析器的实例

  lParser = parseImages()

  #打开HTML文件

  u = urllib.urlopen(urlString)

  print
"Opening URL\n===================="

  print u.info()

  #把HTML文件传给解析器

  lParser.feed(u.read())

  lParser.close()

  上述代码的运行结果如下所示:

  Opening URL

  ====================

  Date: Fri, 26 Jun
2009
10:54:49 GMT

  Server: Apache/2.2.9 (Debian) DAV/2
SVN/1.5.1 mod_ssl/2.2.9
OpenSSL/0.9.8g mod_wsgi/2.3 Python/2.5.2

  Last-Modified: Thu,
25 Jun
2009 09:44:54
GMT

  ETag: "105800d-46e7-46d29136f7180"

  Accept-Ranges: bytes

  Content-Length:
18151

  Connection: close

  Content-Type: text/html

  Saving python-logo.gif

  Saving trans.gif

  Saving trans.gif

  Saving afnic.fr.png
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息