15 Beautiful Soup(提取數據詳解find_all())


# 1、獲取所有tr標簽
# 2、獲取第2個tr標簽
# 3、獲取所有class等於even的tr標簽
# 4_1、將所有id等於test,class也等於test的所有a標簽提取出
# 4_2、獲取所有a標簽下href屬性的值
# 5、獲取所有的職位信息(純文本)


# 1、獲取所有tr標簽
 1 from bs4 import BeautifulSoup
 2 text = """
 3 <table class="tablelist" cellpadding="0" cellspacing="0">
 4     <tbody>
 5         <tr class="h">
 6             <td class="l" width="374">職位名稱</td>
 7             <td>職位類別</td>
 8             <td>人數</td>
 9             <td>地點</td>
10             <td>發布時間</td>
11         </tr>
12         <tr class="even">
13             <td class="l square"><a target="blank"
14 href="https://www.baidu.com/">研發工程師(上海1)</a></td>
15             <td>技術類</td>
16             <td>1</td>
17             <td>上海</td>
18             <td>2020-1-1</td>
19         </tr>
20         <tr class="odd">
21             <td class="l square"><a target="blank"
22 href="https://www.baidu.com/">工程師(北京2)</a></td>
23             <td>技術類</td>
24             <td>2</td>
25             <td>北京</td>
26             <td>2020-2-2</td>
27         </tr>
28         <tr class="even">
29             <td class="l square"><a target="blank"
30 href="https://www.baidu.com/">工程師(上饒3)</a></td>
31             <td>管理類</td>
32             <td>3</td>
33             <td>上饒</td>
34             <td>2020-3-3</td>
35         </tr>
36     </tbody>
37 </table>
38 """
39 
40 soup = BeautifulSoup(text, 'lxml')
41 # 1、獲取所有tr標簽
42 trs = soup.find_all('tr')
43 for tr in trs:
44     print(tr)
45     print('='*30)

 

# 2、獲取第2個tr標簽
1 # 2、獲取第2個tr標簽
2 # limit參數指限制多少個標簽提取
3 tr2 = soup.find_all('tr', limit=2)[1]
4 print(tr2)
# 3、獲取所有class等於even的tr標簽
1 # 3、獲取所有class等於even的tr標簽
2 # class為python關鍵字,后面加_加以區分
3 trs = soup.find_all('tr', class_ = 'even')
4 for tr in trs:
5     print(tr)
6     print('='*30)
1 #方法二:
2 trs = soup.find_all('tr', attrs={'class':'even'})
3 for tr in trs:
4     print(tr)
5     print('='*30)
# 4_1、將所有id等於test,class也等於test的所有a標簽提取出
# 4_1、將所有id等於test,class也等於test的所有a標簽提取出
# 方法一:
alists1 = soup.find_all('a', attrs={'id':'test', 'class':'test'})
print(alists1)
# 方法二
alists2 = soup.find_all('a', class_='test', id='test')
print(alists2)
# 4_2、獲取所有a標簽下href屬性的值
1 # 4_2、獲取所有a標簽下href屬性的值
2 ahs = soup.find_all('a')
3 for ah in ahs:
4     # 方法一:通過下標操作
5     href1 = ah['href']
6     print('href1={}'.format(href1))
7     # 方法二:通過屬性操作
8     href2 = ah.attrs['href']
9     print('href2={}'.format(href2))
# 5、獲取所有的職位信息(純文本)
 1 # 5、獲取所有的職位信息(純文本)
 2 trs = soup.find_all('tr')[1:]   # 從第二個tr開始獲取
 3 movies = []
 4 for tr in trs:
 5     movie = {}
 6     tds = tr.find_all('td')
 7     title = tds[0].string
 8     category = tds[1].string
 9     num = tds[2].string
10     city = tds[3].string
11     time = tds[4].string
12     movie['title'] = title
13     movie['category'] = category
14     movie['num'] = num
15     movie['city'] = city
16     movie['time'] = time
17     movies.append(movie)
18 
19 print(movies)
# 5、獲取所有的職位信息(純文本)方法二:推薦
 1 trs = soup.find_all('tr')[1:]   # 從第二個tr開始獲取
 2 movies = []
 3 for tr in trs:
 4     movie = {}
 5     # 獲取tr下所有非標簽字符
 6     # infos= list(tr.strings)
 7     # 獲取tr下所有非標簽&非空白字符
 8     infos = list(tr.stripped_strings)
 9     #print(infos)
10     movie['title'] = infos[0]
11     movie['category'] = infos[1]
12     movie['num'] = infos[2]
13     movie['city'] = infos[3]
14     movie['time'] = infos[4]
15     movies.append(movie)
16 
17 print(movies)

 

附:關於string、strings、stripped_strings屬性以及get_text()方法:

string:      獲取某個標簽下的非標簽字符串,返回值是一個字符串。

strings:       獲取某個標簽下的子孫非標簽字符串,返回值是一個生成器。

stripped_strings:  獲取某個標簽下的子孫非標簽字符串並去掉空白字符,返回值是一個生成器。

get_text():       獲取某個標簽下的子孫非標簽字符串,不是以列表的形式返回,是以普通字符串返回。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM