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

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

中国互联网络资讯网提示: 对搜索引擎、文件索引、文档转换、数据检索、站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理。事

中国互联网络资讯网提示: 对搜索引擎、文件索引、文档转换、数据检索、站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理。事实上,通过Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档。

  二、从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  0 9 : 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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值