1、初始化BeautifulSoup對象
url = 'https://hr.163.com/position/list.do?workPlaceStr=1¤tPage=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:返回的是一個迭代器