python 爬蟲之find find all用法

2021-09-25 02:56:41 字數 2410 閱讀 4129

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,開啟網路監聽,示意如下,比如知乎,點登入之後,我們會發現登陸之後介面都變化了,出現乙...