久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python 插件雜談 (4) ---- BeautifulSoup , Python中的網(wǎng)頁(yè)分析工具

 liluvu 2012-09-27

Python 插件雜談 (4) ---- BeautifulSoup , Python中的網(wǎng)頁(yè)分析工具

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

  • Beautiful Soup 不會(huì)選擇 即使你給他一個(gè)損壞的標(biāo)簽,。 他產(chǎn)生一個(gè)轉(zhuǎn)換DOM樹(shù),盡可能和你原文檔內(nèi)容含義一致 ,。這種措施通常能夠你搜集數(shù)據(jù)的需求,。
  • Beautiful Soup 提供一些簡(jiǎn)單的方法以及類Python語(yǔ)法 來(lái)查找、查找,、修改一顆轉(zhuǎn)換樹(shù):一個(gè)工具集幫助你解析一棵樹(shù)并釋出你需要的內(nèi)容,。你不需要為每一個(gè)應(yīng)用創(chuàng)建自己的解析工具。
  • Beautiful Soup 自動(dòng)將送進(jìn)來(lái)的文檔轉(zhuǎn)換為 Unicode 編碼 而且在輸出的時(shí)候轉(zhuǎn)換為 UTF-8,,。 除非這個(gè)文檔沒(méi)有指定編碼方式或者Beautiful Soup 沒(méi)能自動(dòng)檢測(cè)編碼,,你需要手動(dòng)指定編碼方式,否則你不需要考慮編碼的問(wèn)題,。

    Beautiful Soup 轉(zhuǎn)換任何你給他的內(nèi)容,,然后為你做那些轉(zhuǎn)換的事情。你可以命令他 “找出所有的鏈接", 或者 "找出所有 class 是 externalLink 的鏈接" , 再或者是 "找出所有的鏈接 url 匹配 ”foo.com", 甚至是 "找出那些表頭是粗體文字,,然后返回給我文字“.
    那些設(shè)計(jì)不好的網(wǎng)站中的有價(jià)值的數(shù)據(jù)可以被你一次鎖定,,原本要花數(shù)個(gè)小時(shí)候的工作,通過(guò)使用 Beautiful Soup 可以在幾分鐘內(nèi)搞定,。
    下面讓我們快速開(kāi)始:
     首先引用包:

  1. from BeautifulSoup import BeautifulSoup          # For processing HTML
  2. from BeautifulSoup import BeautifulStoneSoup     # For processing XML
  3. import BeautifulSoup                             # To get everything[/font][/color]
復(fù)制代碼

   下面使用一段代碼演示Beautiful Soup的基本使用方式,。你可以拷貝與粘貼這段代碼自己運(yùn)行。

  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>
復(fù)制代碼

下面是一個(gè)解析文檔的方法:

  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>
復(fù)制代碼

接著是一打方法查找一文檔中包含的標(biāo)簽,,或者含有指定屬性的標(biāo)簽

  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'
復(fù)制代碼

當(dāng)然也可以簡(jiǎn)單地修改文檔

  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, " <p> tags!")
  38. soup.body
  39. # <body>This page used to have <b>two</b> <p> tags!</body>
復(fù)制代碼

最后,,為大家提供 Beautiful Soup 的文檔。希望能對(duì)您有幫助,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多