CSS選擇器
Beautiful Soup還提供了另外一種選擇器,那就是CSS選擇器。如果對Web開發熟悉的話,那麼對CSS選擇器肯定也不陌生,如果不熟悉的話,可以參考W3Cschool中的相關知識。
使用CSS選擇器時,只需要調用select( )方法,傳入相應的CSS選擇器即可,示例如下:
運行結果如下:
這裡我們用了3次CSS選擇器,返回的結果均是符合CSS選擇器的節點組成的列表。例如select('ul li')則是選擇所有ul節點下面的所有li節點,結果便是所有li節點組成的列表。
最後一句列印輸出了列表中元素的類型。可以看到,類型依然是Tag類型。
嵌套選擇
select( )方法同樣支持嵌套選擇。例如,先選擇所有ul節點,再遍歷每個ul節點,選擇其li節點,樣例如下:
運行結果如下:
可以看到,這裡正常輸出了所有ul節點下所有li節點組成的列表。
獲取屬性
我們知道節點類型是Tag類型,所以獲取屬性還可以用原來的方法。仍然是上面的HTML文本,這裡嘗試獲取每個ul節點的id屬性:
運行結果如下:
可以看到,直接傳入中括號和屬性名,以及通過attrs屬性獲取屬性值,都可以成功。
獲取文本
要獲取文本,當然也可以用前面所講string屬性。此外,還有一個方法,那就是get_text( ),示例如下:
運行結果如下:
可以看到二者的效果完全一致。
到此,Beautiful Soup的用法基本就介紹完了,我們來做一下簡單的總結:
推薦使用lxml解析庫,必要時使用html.parser。節點選擇篩選功能弱但是速度快。建議使用find( )或者find_all( )查詢匹配單個結果或者多個結果。如果對CSS選擇器熟悉的話,可以使用select( )方法選擇。使用pyquery
如果你對Web有所涉及,如果你比較喜歡用CSS選擇器,如果你對jQuery有所了解,那麼這裡有一個更適合你的解析庫——pyquery。首先在使用之前,確保我們已經安裝好了pyquery。
初始化像Beautiful Soup一樣,初始化pyquery的時候,也需要傳入HTML文本來初始化一個PyQuery對象。它的初始化方式有多種,比如直接傳入字符串,傳入URL,傳入文件名,等等。下面我們來詳細介紹一下。
字符串初始化首先我們用一個實例來感受一下:
運行結果如下:
這裡首先引入PyQuery這個對象,取別名為pq。然後聲明了一個長HTML字符串,並將其當作參數傳遞給PyQuery類,這樣就成功完成了初始化。接下來,將初始化的對象傳入CSS選擇器。在這個實例中,我們傳入li節點,這樣就可以選擇所有的li節點。
URL初始化初始化的參數不僅可以以字符串的形式傳遞,還可以傳入網頁的URL,此時只需要指定參數為url即可:
運行結果如下:
這樣的話,pyQuery對象會首先請求這個URL,然後用得到的HTML內容完成初始化,這其實就相當於用網頁的原始碼以字符串的形式傳遞給PyQuery類來初始化。
它與下面的功能是相同的:
文件初始化當然,除了傳遞URL,還可以傳遞本地的文件名,此時將參數指定為filename即可:
當然這裡需要有一個本地HTML文件test.html,其內容是待解析的HTML字符串。這樣它會首先讀取本地的文件內容,然後用文件內容以字符串的形式傳遞給PyQuery類來初始化。
以上三種初始化方式均可,當然最常用的初始化方式還是以字符串形式傳遞。