python爬蟲(1.find和findAll函式提取文字)
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
bsObj = BeautifulSoup(html)
#根據css樣式表查詢
nameList = bsObj.findAll("span", {"class":"green"})
for name in nameList:
print(name.get_text()) #get_text()能去除標籤
開啟該網站,右鍵審查元素,可看到
即標籤為span,class 名為green的文字是我們提取的內容。
執行程式結果為:
find和findAll用法介紹:
**findAll(tag, attributes, recursive, text, limit, keywords)
find(tag, attributes, recursive, text, keywords)**
一般只用到前兩個引數 tag,attribute
tag: .findAll({“h1”,”h2”,”h3”,”h4”,”h5”,”h6”})
attribute: .findAll(“span”, {“class”:{“green”, “red”}})
遞迴引數 recursive 是一個布林變數。你想抓取 HTML 文件標籤結構裡多少層的資訊?如果 recursive 設定為 True , findAll 就會根據你的要求去查詢標籤引數的所有子標籤,以及子標籤的子標籤。如果 recursive 設定為 False , findAll 就只查詢文件的一級標籤。
findAll 預設是支援遞迴查詢的( recursive 預設值是 True );一般情況下這個引數不需要設定,除非你真正瞭解自己需要哪些資訊,而且抓取速度非常重要,那時你可以設定遞迴引數。
文字引數 text 有點不同,它是用標籤的文字內容去匹配,而不是用標籤的屬性。假如我們想查詢前面網頁中包含 “the prince” 內容的標籤數量nameList = bsObj.findAll(text=”the prince”)
範圍限制引數 limit ,顯然只用於 findAll 方法。 find 其實等價於 findAll 的 limit 等於 1 時的情形。如果你只對網頁中獲取的前 x 項結果感興趣,就可以設定它。但是要注意,這個引數設定之後,獲得的前幾項結果是按照網頁上的順序排序的,未必是你想要的那前幾項
關鍵詞引數 keyword ,可以讓你選擇那些具有指定屬性的標籤
參考資料:Python網路資料採集