beautifulsoup 文件裡,find、find_all兩者的定義如下:
find_all(tag, attributes, recursive, text, limit, keywords)
find(tag, attributes, recursive, text, keywords)
find與find_all的區別,find只會取符合要求的第乙個元素,find_all會根據範圍限制引數limit限定的範圍取元素(預設不設定代表取所有符合要求的元素,find 等價於 find_all的 limit =1 時的情形),接下來將對每個引數一一介紹。
另外,find_all會將所有滿足條件的值取出,組成乙個list
標籤引數 tag 可以傳乙個標籤的名稱或多個標籤名稱組成的set做標籤引數。例如,下面的**將返回乙個包含 html 文件中所有標題標籤的列表: find_all()
下面以中原網頁面舉例,如下圖,現在要將頁面上的所有標題取出,觀察html可以發現,標題對應的tag 是h4,則soup.find_all('h4')
上面例子只是乙個標籤的情況,如果多個標籤寫法相同,只是注意要將所有的標籤寫在乙個set裡面
屬性引數 attributes 是用字典封裝乙個標籤的若干屬性和對應的屬性值。如,下面這個函式會返回 html 文件裡"house-name", "house-txt"兩種的 p 標籤。find_all("p", })
如下圖,現在要獲取紅色框選中的三行資訊,通過觀察可知,三行資訊屬性"house-name", "house-txt",標籤為p,則
遞迴引數 recursive 是乙個布林變數。你想抓取 html 文件標籤結構裡多少層的資訊?如recursive 設定為 true, find_all 就會根據你的要求去查詢標籤引數的所有子標籤,以及標籤的子標籤。如果 recursive 設定為 false, find_all 就只查詢文件的一級標籤。 find_all預設是支援遞迴查詢的(recursive 預設值是 true);一般情況下這個引數不需要設定,非你真正了解自己需要哪些資訊,而且抓取速度非常重要,那時你可以設定遞迴引數。
這個太少用了(反正我自己就沒用過,不舉例了)
文字引數 text 有點不同,它是用標籤的文字內容去匹配,而不是用標籤的屬性。
直接舉例吧,在這個網頁中,我們要查詢一下,戶型為「2室1廳」的有多少個,則
alink = soup.find_all(text='2室1廳')
print(alink)
需要特別注意一點,這裡查詢是用的是完全匹配原則,意思是如果這裡你用了find_all(text='2室'),得到的結果會是0個
同樣是上面網頁的內容,現在要取id='one2'的內容,則
from bs4 import beautifulsoup
import requests
url = ''
urlhtml=requests.get(url)
urlhtml.encoding='utf-8'
soup=beautifulsoup(urlhtml.text,'lxml')
alink = soup.find_all(id="one2")
print(alink)
注意:如果是class、id等引數,用keywords 或者attributes用法一樣,如果是一些其他引數,則用keywords Python爬蟲之爬蟲概述
知識點 模擬瀏覽器,傳送請求,獲取響應 網路爬蟲 又被稱為網頁蜘蛛,網路機械人 就是模擬客戶端 主要指瀏覽器 傳送網路請求,接收請求響應,一種按照一定的規則,自動地抓取網際網路資訊的程式。知識點 了解 爬蟲的概念 爬蟲在網際網路世界中有很多的作用,比如 資料採集 抓取招聘 的招聘資訊 資料分析 挖掘...
python爬蟲感悟 Python之爬蟲有感(一)
urllib.request.request url headers headers user agent 是爬蟲和反爬蟲鬥爭的第一步,傳送請求必須帶user agent 使用流程 1 建立請求物件 request urlllib.request.request url 2 傳送請求獲取響應物件 r...
python爬蟲header 爬蟲之header
有些 不會同意程式直接用上面的方式進行訪問,如果識別有問題,那麼站點根本不會響應,所以為了完全模擬瀏覽器的工作,我們需要設定一些headers 的屬性。首先,開啟我們的瀏覽器,除錯瀏覽器f12,我用的是chrome,開啟網路監聽,示意如下,比如知乎,點登入之後,我們會發現登陸之後介面都變化了,出現乙...