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

分享

BeautifulSoup 安裝及其使用

 nikybook 2015-02-18

BeautifulSoup 安裝及其使用

BeautifulSoup 是個(gè)好東東,。

官網(wǎng)見(jiàn)這里: http://www./software/BeautifulSoup/

下載地址見(jiàn)這里:http://www./software/BeautifulSoup/bs4/download/4.1/ ,,附件有4.1.2的安裝源碼

文檔見(jiàn)這里: http://www./software/BeautifulSoup/bs3/documentation.zh.html ,,是中文翻譯的,,不過(guò)文檔有點(diǎn)舊,是 3.0 的文檔版本,,看起來(lái)沒(méi)有什么意思,。

我推薦大家看個(gè): http://www./software/BeautifulSoup/bs4/doc/ ,這個(gè)是 python 的官網(wǎng)英文版,,看起來(lái)要舒服,,清晰很多。

在 python 下,,你想按照 jquery 格式來(lái)讀取網(wǎng)頁(yè),,免除網(wǎng)頁(yè)格式、標(biāo)簽的不規(guī)范的困擾,,那么 BeautifulSoup 是個(gè)不錯(cuò)的選擇,。按照官網(wǎng)所說(shuō), BeautifulSoup 是 Screen-Scraping 應(yīng)用,,旨在節(jié)省大家處理 HTML 標(biāo)簽,,并且從網(wǎng)絡(luò)中獲得信息的工程。 BeautifulSoup 有這么幾個(gè)優(yōu)點(diǎn),,使得其功能尤其強(qiáng)大:

1 : Beautiful Soup provides a few simple methods and Pythonic idioms for navigating, searching, and modifying a parse tree: a toolkit for dissecting a document and extracting what you need. It doesn't take much code to write an application ,。關(guān)鍵詞: python 風(fēng)格、提供簡(jiǎn)單方法

2 : Beautiful Soup automatically converts incoming documents to Unicode and outgoing documents to UTF-8. You don't have to think about encodings, unless the document doesn't specify an encoding and Beautiful Soup can't autodetect one. Then you just have to specify the original encoding ,。關(guān)鍵詞:編碼轉(zhuǎn)換,,使用 Python 的同學(xué)都會(huì)認(rèn)同 Python 編碼格式的繁瑣, BeautifulSoup 能簡(jiǎn)化這一點(diǎn),。

3 : Beautiful Soup sits on top of popular Python parsers like lxml and html5lib , allowing you to try out different parsing strategies or trade speed for flexibility ,。關(guān)鍵詞:兼容其它 html 解析器,能夠讓你隨心替換,。

看完這幾個(gè)特性,,想必有人心動(dòng)了吧,我們先看下 BeautifulSoup 的安裝:

安裝方法:

1 : apt-get install python-bs4

2 : easy_install beautifulsoup4

3 : pip install beautifulsoup4

4 :源碼安裝: python setup.py install

 

根據(jù)不同的操作系統(tǒng),,選用不同的安裝方法,,這些方法都能安裝成功,不同點(diǎn)在于安裝的工具不同,。我自己的系統(tǒng)采用的是第四種安裝方法,,下面我來(lái)簡(jiǎn)要介紹下第四種安裝方法:

 

Python代碼  收藏代碼
  1. curl http://www./software/BeautifulSoup/bs4/download/4.1/beautifulsoup4-4.1.2.tar.gz >> beautifulsoup4-4.1.2.tar.gz  
  2. tar zxvf beautifulsoup4-4.1.2.tar.gz  
  3. cd beautifulsoup4-4.1.2  
  4. python setup.py install  
 

Ok ,你就能看到安裝信息,,提示安裝成功,。

 

安裝成功,肯定想迫不及待的使用,你打開(kāi) python command 窗口,,你很 happy 的輸入:

 

Python代碼  收藏代碼
  1. from beautifulsoup import beautifulsoup  

 

sorry ,, ImportError ,為什么會(huì)有這個(gè) import error ,,我都安裝好了的,。打開(kāi)官網(wǎng),重新看下說(shuō)明,,原來(lái)安裝的是 BeautifulSoup 4.1 版本,,這個(gè) import 是 3.x 的說(shuō)法。重新打開(kāi) command ,,輸入:

 

Python代碼  收藏代碼
  1. from bs4 import BeautifulSoup  

咦,沒(méi)有輸出提示,。恭喜你,, BeautifulSoup 包引入成功。

看文上篇博客,, http://isilic./blog/1733560 ,,想試下 dir 命令,看看 BeautifulSoup 提供了哪些方法:

 

Python代碼  收藏代碼
  1. dir(BeautifulSoup)  

 看到一堆的方法,,有點(diǎn)頭大,,將方法列出來(lái)會(huì)方便看許多。

 

Python代碼  收藏代碼
  1. >>> for method in dir(BeautifulSoup):  
  2. ...        print method  
  3. ...  

 

       請(qǐng)仔細(xì)看下其中的 findXxx ,, nextXxx ,, previousXxx 方法,這些方法提供了 html 頁(yè)面的遍歷,、回溯,、查找、匹配功能,;這些功能已經(jīng)能夠提供獲取頁(yè)面信息的方法了。

我們以百度首頁(yè)為例,試用下 BeautifulSoup 的強(qiáng)大功能,。

 

Python代碼  收藏代碼
  1. >>> import urllib2  
  2. >>> page=urllib2.urlopen('http://www.baidu.com')  
  3. >>> soup=BeautifulSoup(page)  
  4. >>> print soup.title  
  5. >>> soup.title.string  
 

看到結(jié)果顯示不錯(cuò),, helloworld 的教程讓人心里真是舒服啊。

想進(jìn)一步試用功能,,我想找出百度首頁(yè)上所有的鏈接,,這個(gè)貌似很難,需要各種正則匹配,,各種處理,;等等,我們現(xiàn)在是在談?wù)撨@個(gè) BeautifulSoup ,看看 BeautifulSoup 怎么實(shí)現(xiàn)這個(gè)功能,。

Python代碼  收藏代碼
  1. >>> for lind in soup.find_all('a'):  
  2. ...   print lind['href']  
  3. ...  
 

看到輸出了嗎,?是不是很簡(jiǎn)單。

 

對(duì)于熟悉 Jquery 和 CSS 的同學(xué),,這種操作就是個(gè)折磨,,需要不停的根據(jù)選擇出來(lái)的結(jié)果進(jìn)行遍歷??吹缴厦娴妮敵?,看到有很多的 # 這些非正常的 URL ,現(xiàn)在想把這些 URL 全部過(guò)濾掉,,使用 select 語(yǔ)法就很簡(jiǎn)單了,。

Python代碼  收藏代碼
  1. >>> for link in soup.select('a[href^=http]'):  
  2. ...   print link['href'];  
  3. ...  
 

有人說(shuō)我根據(jù)判斷出來(lái)的 URL 做處理不行嘛,當(dāng)然可以,,我這里只是想試下 select 的語(yǔ)法,,至于 select 中的語(yǔ)法定義,大家可以自行度之,。準(zhǔn)確的說(shuō),,這個(gè) select 語(yǔ)法都能重新開(kāi)篇文章了。

再進(jìn)一步,,連接中的 / 或者 /duty 鏈接都是有含義的,,是相對(duì)于本站的絕對(duì)地址,這些 / 開(kāi)頭的怎么不被過(guò)濾掉,?如果是絕對(duì)地址的話,,又該怎么防止被過(guò)濾掉? href 標(biāo)簽里面是個(gè) javascript 又該怎么過(guò)濾,?如果考慮 css 文件和 js 文件的話,,怎么把這些文件的 url 也給找出來(lái)?還有更進(jìn)一步的,,怎么分析出 js 中 ajax 的請(qǐng)求地址,?這些都是可以進(jìn)一步擴(kuò)展的一些要求。

好吧,,我承認(rèn)后面這些 URL 過(guò)濾已經(jīng)超出了 BeautifulSoup 的能力范圍了,,但是單純考慮功能的話,這些都是要考慮的內(nèi)容,,這些疑問(wèn)大家考慮下實(shí)現(xiàn)原理就行,,如果能做進(jìn)一步的學(xué)習(xí)的話,算是本文額外的功勞了,。

 

下面簡(jiǎn)單過(guò)下 BeautifulSoup 的用法:

 

Python代碼  收藏代碼
  1. DEFAULT_BUILDER_FEATURES  
  2. FORMATTERS  
  3. ROOT_TAG_NAME  
  4. STRIP_ASCII_SPACES:BeautifulSoup的內(nèi)置屬性  
  5. __call__  
  6. __class__  
  7. __contains__  
  8. __delattr__  
  9. __delitem__  
  10. __dict__  
  11. __doc__  
  12. __eq__  
  13. __format__  
  14. __getattr__  
  15. __getattribute__  
  16. __getitem__  
  17. __hash__  
  18. __init__  
  19. __iter__  
  20. __len__  
  21. __module__  
  22. __ne__  
  23. __new__  
  24. __nonzero__  
  25. __reduce__  
  26. __reduce_ex__  
  27. __repr__  
  28. __setattr__  
  29. __setitem__  
  30. __sizeof__  
  31. __str__  
  32. __subclasshook__  
  33. __unicode__  
  34. __weakref__  
  35. _all_strings  
  36. _attr_value_as_string  
  37. _attribute_checker  
  38. _feed  
  39. _find_all  
  40. _find_one  
  41. _lastRecursiveChild  
  42. _last_descendant  
  43. _popToTag:BeautifulSoup的內(nèi)置方法,,關(guān)于這些方法使用需要了解Python更深些的內(nèi)容,。  
  44. append:修改element tree  
  45. attribselect_re  
  46. childGenerator  
  47. children  
  48. clear:清除標(biāo)簽內(nèi)容  
  49. decode  
  50. decode_contents  
  51. decompose  
  52. descendants  
  53. encode  
  54. encode_contents  
  55. endData  
  56. extract:這個(gè)方法很關(guān)鍵,后面有介紹  
  57. fetchNextSiblings下一兄弟元素  
  58. fetchParents:父元素集  
  59. fetchPrevious:前一元素  
  60. fetchPreviousSiblings:前一兄弟元素:這幾個(gè)能夠?qū)Ξ?dāng)前元素的父級(jí)別元素和兄弟級(jí)別進(jìn)行查找,。  
  61. find:只找到limit為1的結(jié)果  
  62. findAll  
  63. findAllNext  
  64. findAllPrevious  
  65. findChild  
  66. findChildren:子集合  
  67. findNext:下一元素  
  68. findNextSibling:下一個(gè)兄弟  
  69. findNextSiblings:下一群兄弟  
  70. findParent:父元素  
  71. findParents:所有的父元素集合  
  72. findPrevious  
  73. findPreviousSibling  
  74. findPreviousSiblings:對(duì)當(dāng)前元素和子元素進(jìn)行遍歷查找,。  
  75. find_all_next  
  76. find_all_previous  
  77. find_next  
  78. find_next_sibling  
  79. find_next_siblings  
  80. find_parent  
  81. find_parents  
  82. find_previous  
  83. find_previous_sibling  
  84. find_previous_siblings:這些下劃線方法命名是bs4方法,推薦使用這類  
  85. format_string  
  86. get  
  87. getText  
  88. get_text:得到文檔標(biāo)簽內(nèi)的內(nèi)容,,不包括標(biāo)簽和標(biāo)簽屬性  
  89. handle_data  
  90. handle_endtag  
  91. handle_starttag  
  92. has_attr  
  93. has_key  
  94. index  
  95. insert  
  96. insert_after  
  97. insert_before:修改element tree  
  98. isSelfClosing  
  99. is_empty_element  
  100. new_string  
  101. new_tag  
  102. next  
  103. nextGenerator  
  104. nextSibling  
  105. nextSiblingGenerator  
  106. next_elements  
  107. next_siblings  
  108. object_was_parsed  
  109. parentGenerator  
  110. parents  
  111. parserClass  
  112. popTag  
  113. prettify:格式化HTML文檔  
  114. previous  
  115. previousGenerator  
  116. previousSibling  
  117. previousSiblingGenerator  
  118. previous_elements  
  119. previous_siblings  
  120. pushTag  
  121. recursiveChildGenerator  
  122. renderContents  
  123. replaceWith  
  124. replaceWithChildren  
  125. replace_with  
  126. replace_with_children:修改element tree 元素內(nèi)容  
  127. reset  
  128. select:適用于jquery和css的語(yǔ)法選擇,。  
  129. setup  
  130. string  
  131. strings  
  132. stripped_strings  
  133. tag_name_re  
  134. text  
  135. unwrap  
  136. wrap  

 

 

需要注意的是,在BeautifulSoup中的方法有些有兩種寫(xiě)法,,有些是駝峰格式的寫(xiě)法,,有些是下劃線格式的寫(xiě)法,但是看其方法的含義是一樣的,,這主要是BeautifulSoup為了兼容3.x的寫(xiě)法,。前者是3.x的寫(xiě)法,后者是4.x的寫(xiě)法,,推薦使用后者,,也就是下劃線的方法。

 

根據(jù)這些方法,,應(yīng)該能夠得到遍歷、抽取,、修改,、規(guī)范化文檔的一系列方法。大家如果能在工作中使用 BeautifulSoup ,,一定會(huì)理解更深,。

 

BeautifulSoup 支持不同的 parser ,默認(rèn)是 Html 格式解析,,還有 xml parser ,、 lxml parser 、 html5lib parser ,、 html.parser ,,這些 parser 都需要響應(yīng)的解析器支持。

 html,,這個(gè)是默認(rèn)的解析器

Python代碼  收藏代碼
  1. BeautifulSoup("<a><b /></a>")  
  2. # <html><head></head><body><a><b></b></a></body></html>  
 

 xml格式解析器

Python代碼  收藏代碼
  1. BeautifulSoup("<a><b /></a>", "xml")  
  2. # <?xml version="1.0" encoding="utf-8"?>  
  3. # <a><b /></a>  
 

 lxml格式解析器

Python代碼  收藏代碼
  1. BeautifulSoup("<a></p>", "lxml")  
  2. # <html><body><a></a></body></html>  
 

 html5lib格式解析器

Python代碼  收藏代碼
  1. BeautifulSoup("<a></p>", "html5lib")  
  2. # <html><head></head><body><a><p></p></a></body></html>  
 

 html.parser解析器

Python代碼  收藏代碼
  1. BeautifulSoup("<a></p>", "html.parser")  
  2. # <a></a>  
 

 

其中 parser 的區(qū)別大家看下這幾個(gè)例子就知道了,。

 

在使用 BeautifulSoup 解析文檔的時(shí)候,會(huì)將整個(gè)文檔以一顆大又密集的數(shù)據(jù)載入到內(nèi)存中,,如果你只是從數(shù)據(jù)結(jié)構(gòu)中獲得一個(gè)字符串,,內(nèi)存中保存一堆數(shù)據(jù)感覺(jué)就不劃算了。并且如果你要獲得指向某個(gè) Tag 的內(nèi)容,,這個(gè) Tag 又會(huì)指向其它的 Tag 對(duì)象,,因此你需要保存這棵樹(shù)的所有部分,也就是說(shuō)整棵樹(shù)都在內(nèi)存中。 extract 方法可以破壞掉這些鏈接,,它會(huì)將樹(shù)的連接部分?jǐn)嚅_(kāi),,如果你得到某個(gè) Tag ,這個(gè) Tag 的剩余部分會(huì)離開(kāi)這棵樹(shù)而被垃圾收集器捕獲,;當(dāng)然,,你也可以實(shí)現(xiàn)其它的功能:如文檔中的某一塊你本身就不關(guān)心,你可以直接把它 extract 出樹(shù)結(jié)構(gòu),,扔給垃圾收集器,,優(yōu)化內(nèi)存使用的同時(shí)還能完成自己的功能。

 

正如 BeautifulSoup 的作者 Leonard 所說(shuō),,寫(xiě) BeautifulSoup 是為了幫助別人節(jié)省時(shí)間,,減小工作量。一旦習(xí)慣使用上 BeautifulSoup 后,,一些站點(diǎn)的內(nèi)容很快就能搞定,。這個(gè)就是開(kāi)源的精神,將工作盡可能的自動(dòng)化,,減小工作量,;從某個(gè)程度上來(lái)說(shuō),程序員應(yīng)該是比較懶惰的,,但是這種懶惰正好又促進(jìn)了軟件行業(yè)的進(jìn)步,。

 

 

 

    本站是提供個(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)論公約

    類似文章 更多