BeautifulSoup的使用

1、初始化BeautifulSoup對象

url = 'https://hr.163.com/position/list.do?workPlaceStr=1&currentPage=1'
resp = requests.get(url, headers=HEADERS)
html = resp.text
soup = BeautifulSoup(html, 'lxml')

在初始化BeautifulSoup對象時,我們需要指定一個引擎:lxml

2、find_all的使用

1.在提取標籤的時候,第一個參數是標籤的名字。然後如果在提取標籤的時候想要使用標籤屬性進行過濾,那麼可以在這個方法中通過關鍵字參數的形式,將屬性的名字以及對應的值傳進去。或者使用‘attrs’屬性,將所有的屬性以及對應的值放在一個字典中傳給‘attrs’屬性
2.有些時候,在提取標籤的時候,不需要提取那麼多,就可以使用‘limit’參數,限制提取的個數

a_s = soup.find_all('a', limit=3)

3、find與find_all的區別

1.find:找到第一個滿足條件的標籤就返回
2.find_all:將所有滿足條件的標籤返回,返回的爲列表

4、使用find和find_all的過濾條件

1 關鍵字參數:將屬性名字作爲關鍵字參數的名字,以及屬性的值作爲關鍵字參數的值進行過濾
2 attrs參數:將屬性條件放到一個字典中,傳給attrs參數

print(soup.find(title='社會招聘'))

5、獲取標籤的屬性

1.通過下標獲取:通過標籤的下標方式

print(soup.find(title='社會招聘'))
返回值:<a class="logo" href="/" title="社會招聘">社會招聘</a>

2.通過attrs屬性獲取:

print(soup.find(title='社會招聘').attrs['title'])

strings和stripped_strings、string屬性以及get_text方法

1、string: 獲取某個標籤下的非標籤字符。返回的是個字符串。需要注意的是:如果在某個標籤下存在多行字符串可,就獲取不到類。
2、strings: 獲取某個標籤下的子孫非標籤字符串。返回的是個生成器
3、stripped_strings:獲取某個標籤下的子孫非標籤字符串,會去掉空白字符。返回的是個生成器。
4、get_text:獲取某個標籤下的子孫非標籤字符串。不是以列表的形式返回。

css常用選擇器

1.根據標籤的名字選擇,

p{
	background-color: pink;
}

2.根據類名選擇,那麼要在前邊加一個點

.line{
	background-color: pink;
}

3.根據id名字選擇,那麼要在id前加一個#

#box{
	background-color: pink;
}

4.查找子孫元素。那麼要在子孫元素中間有個空格。

#box p{
	background-color: pink;	
}

5.查找直接子元素,那麼要在父子元素之間有個>

#box > p{
	background-color: pink;
}

6.根據屬性的名字進行查找,那麼應該先寫標籤名字,然後再在括號中寫屬性的值

input[name='username']{
	background-color: pink;
}

7.根據類名或者id進行查找的時候,如果還需要根據標籤名進行過濾。那麼可以在類的前面或者id的前面加上標籤的名字

div#line{
	background-color: pink;
}

常見的四種對象

1、Tag: BeautifulSoup中所有的標籤都是Tag類型,並且BeautifulSoup的對象其實本質上也是一個Tag類型。所以其實一些方法比如find、find_all並不是BeautifulSoup的,而是Tag的
2、NavigableString:繼承自Python中的str,用起來就跟使用python的str是一樣的。
3、BeautifulSoup:繼承自Tag。用於生成BeautifululSoup樹的,對於一些查找方法,比如find,find_all這些,其實還是Tag的
4、Comment:繼承自NavigableString

contents 和 children

返回某個標籤下的直接子元素,其中也包括字符串。他們的區別:
Contents:返回的是一個列表
Children:返回的是一個迭代器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章