Python 外掛程式雜談 (4) —- BeautifulSoup , Python中的網頁分析工具

來源:互聯網
上載者:User

嗯哼,Meego中文核心站-- 米趣網 又發新博文啦。
    前面向大家介紹了 PyQuery    ,下面轉而介紹一下 BeautifulSoup   , Beautiful Soup 是 Python 內建的網頁分析工具,名字叫美麗的蝴蝶。呵呵,某些時候確如美麗蝴蝶一樣。
    先來段介紹:
    Beautiful Soup 是一個 Python HTML/XML 處理器,設計用來快速地轉換網頁抓取。以下的特性支撐著 Beautiful Soup:   

  • Beautiful Soup 不會選擇 即使你給他一個損壞的標籤。 他產生一個轉換DOM樹,儘可能和你原文檔內容含義一致 。這種措施通常能夠你搜集資料的需求。
  • Beautiful Soup 提供一些簡單的方法以及類Python文法 來尋找、尋找、修改一顆轉換樹:一個工具集協助你解析一棵樹並釋出你需要的內容。你不需要為每一個應用建立自己的解析工具。
  • Beautiful Soup 自動將送進來的文檔轉換為 Unicode 編碼 而且在輸出的時候轉換為 UTF-8,。 除非這個文檔沒有指定編碼方式或者Beautiful Soup 沒能自動檢測編碼,你需要手動指定編碼方式,否則你不需要考慮編碼的問題。

    Beautiful Soup 轉換任何你給他的內容,然後為你做那些轉換的事情。你可以命令他 “找出所有的連結", 或者 "找出所有 class 是 externalLink 的連結" , 再或者是 "找出所有的連結 url 匹配 ”foo.com", 甚至是 "找出那些表頭是粗體文字,然後返回給我文字“.
    那些設計不好的網站中的有價值的資料可以被你一次鎖定,原本要花數個小時候的工作,通過使用 Beautiful Soup 可以在幾分鐘內搞定。
    下面讓我們快速開始:
     首先引用包:

  1. from BeautifulSoup import BeautifulSoup          # For processing HTML
  2. from BeautifulSoup import BeautifulStoneSoup     # For processing XML
  3. import BeautifulSoup                             # To get everything[/font][/color]

複製代碼

   下面使用一段代碼示範Beautiful Soup的基本使用方式。你可以拷貝與粘貼這段代碼自己運行。

  1. from BeautifulSoup import BeautifulSoup
  2. import re
  3. doc = ['<html><head><title>Page title</title></head>',
  4.        '<body><p id="firstpara" align="center">This is paragraph <b>one</b>.',
  5.        '<p id="secondpara" align="blah">This is paragraph <b>two</b>.',
  6.        '</html>']
  7. soup = BeautifulSoup(''.join(doc))
  8. print soup.prettify()
  9. # <html>
  10. #  <head>
  11. #   <title>
  12. #    Page title
  13. #   </title>
  14. #  </head>
  15. #  <body>
  16. #   <p id="firstpara" align="center">
  17. #    This is paragraph
  18. #    <b>
  19. #     one
  20. #    </b>
  21. #    .
  22. #   </p>
  23. #   <p id="secondpara" align="blah">
  24. #    This is paragraph
  25. #    <b>
  26. #     two
  27. #    </b>
  28. #    .
  29. #   </p>
  30. #  </body>
  31. # </html>

複製代碼

下面是一個解析文檔的方法:

  1. soup.contents[0].name
  2. # u'html'
  3. soup.contents[0].contents[0].name
  4. # u'head'
  5. head = soup.contents[0].contents[0]
  6. head.parent.name
  7. # u'html'
  8. head.next
  9. # <title>Page title</title>
  10. head.nextSibling.name
  11. # u'body'
  12. head.nextSibling.contents[0]
  13. # <p id="firstpara" align="center">This is paragraph <b>one</b>.</p>
  14. head.nextSibling.contents[0].nextSibling
  15. # <p id="secondpara" align="blah">This is paragraph <b>two</b>.</p>

複製代碼

接著是一打方法尋找一文檔中包含的標籤,或者含有指定屬性的標籤

  1. titleTag = soup.html.head.title
  2. titleTag
  3. # <title>Page title</title>
  4. titleTag.string
  5. # u'Page title'
  6. len(soup('p'))
  7. # 2
  8. soup.findAll('p', align="center")
  9. # [<p id="firstpara" align="center">This is paragraph <b>one</b>. </p>]
  10. soup.find('p', align="center")
  11. # <p id="firstpara" align="center">This is paragraph <b>one</b>. </p>
  12. soup('p', align="center")[0]['id']
  13. # u'firstpara'
  14. soup.find('p', align=re.compile('^b.*'))['id']
  15. # u'secondpara'
  16. soup.find('p').b.string
  17. # u'one'
  18. soup('p')[1].b.string
  19. # u'two'

複製代碼

當然也可以簡單地修改文檔

  1. titleTag['id'] = 'theTitle'
  2. titleTag.contents[0].replaceWith("New title")
  3. soup.html.head
  4. # <head><title id="theTitle">New title</title></head>
  5. soup.p.extract()
  6. soup.prettify()
  7. # <html>
  8. #  <head>
  9. #   <title id="theTitle">
  10. #    New title
  11. #   </title>
  12. #  </head>
  13. #  <body>
  14. #   <p id="secondpara" align="blah">
  15. #    This is paragraph
  16. #    <b>
  17. #     two
  18. #    </b>
  19. #    .
  20. #   </p>
  21. #  </body>
  22. # </html>
  23. soup.p.replaceWith(soup.b)
  24. # <html>
  25. #  <head>
  26. #   <title id="theTitle">
  27. #    New title
  28. #   </title>
  29. #  </head>
  30. #  <body>
  31. #   <b>
  32. #    two
  33. #   </b>
  34. #  </body>
  35. # </html>
  36. soup.body.insert(0, "This page used to have ")
  37. soup.body.insert(2, " &lt;p&gt; tags!")
  38. soup.body
  39. # <body>This page used to have <b>two</b> &lt;p&gt; tags!</body>

複製代碼

最後,為大家提供 Beautiful Soup 的文檔。希望能對您有協助。

 

轉載文章 ,請註明來自  米趣網

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.