利用Python抓取和解析網頁(下)

來源:互聯網
上載者:User

轉載自: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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.