對於咱們這個實例來講,首先第一步應該是將網頁源碼下載下來,這個工做咱們已經熟悉得不能再熟悉了,這裏就直接貼上代碼
css
import urllib2 url = 'http://beautifulsoup.readthedocs.org/zh_CN/latest/#' # 這裏能夠不添加headers,因此沒有寫對headers的操做 request = urllib2.Request(url) response = urllib2.urlopen(request) contents = response.read() print contents
下載源碼完成以後,咱們就應該使用BS4來處理源碼獲取咱們想要的信息,在處理以前,千萬不要忘了引入BS4模塊,建立 BeautifulSoup 對象的實例,這是一切其餘操做可以進行下去的前提,這固然也很簡單
html
import urllib2 # 引入模塊 from bs4 import BeautifulSoup url = 'http://beautifulsoup.readthedocs.org/zh_CN/latest/#' request = urllib2.Request(url) response = urllib2.urlopen(request) contents = response.read() # 構造 BeautifulSoup 的實例 soup = BeautifulSoup(contents)
好了,全部的工做都作完以後,咱們再來考慮一個問題,怎麼輸出soup處理的結果?前面的代碼只是下載源碼,建立soup實例,咱們並無將任何結果輸出,因此運行上面的代碼是不會返回任何結果的,那麼,第一個問題:我想看看整個soup對象是什麼樣的,因此我要將整個結果輸出出來,該怎麼輸出呢?python
首先打開BS4的文檔,目錄裏面有個輸出的章節,這裏會不會有呢?點進去以後的第一句話是這樣的:編碼
prettify()
方法將Beautiful Soup的文檔樹格式化後以Unicode編碼輸出,每一個XML/HTML標籤都獨佔一行urlmarkup = '<a href="http://example.com/">I linked to <i>example.com</i></a>' soup = BeautifulSoup(markup) soup.prettify() print(soup.prettify())
這個 prettify() 好像能夠輸出soup實例的內容,並且好像使用方法還很簡單,咱們把這兩行代碼加入程序中試試看吧code
soup.prettify() print(soup.prettify())
輸出結果以下orm
好了,咱們已經將整個soup的結果輸出出來了,這看起來跟網頁的源碼好像沒什麼區別,那麼,如今來考慮下一個問題,每一篇文檔都會有標題,咱們下載這個文檔以後也會將文檔以它的標題來命名並保存到文件中,那麼,如今要作的事情就是怎麼將文檔的標題提取出來,咱們再來找找文檔htm
操做文檔樹最簡單的方法就是告訴它你想獲取的tag的name.若是想獲取 <head> 標籤,只要用
soup.head
:對象soup.head # <head><title>The Dormouse's story</title></head> soup.title # <title>The Dormouse's story</title>
好的,咱們將這個代碼加入程序中並將結果print出來,結果是這樣的rem
<title>Beautiful Soup 4.2.0 文檔 — Beautiful Soup 4.2.0 中文 文檔</title>
咱們發現,這裏將整個title標籤的內容都輸出出來了,說明soup.<tag> 的形式是獲取整個標籤並返回,那麼咱們怎麼獲取標籤裏面的內容呢?別急文檔會告訴你
字符串常被包含在tag內.Beautiful Soup用
NavigableString
類來包裝tag中的字符串:tag.string # u'Extremely bold'
按照上面例子的描述,若是咱們想要將標籤裏面的字符串提取出來,那麼咱們就須要這樣寫:
soup.title.string
好告終果OK
在這裏我想說一個概念:tag,咱們在使用BS4搜索時,文檔中一直使用tag這個名詞,它究竟是什麼呢?
其實,這個tag就是html的標籤,也就是咱們常常看到的<p>...</p>,<a>...</a>這些,固然,html的標籤還有不少,詳細的內容能夠參考:http://www.divcss5.com/html/h323.shtml