16 select和css选择器,提取元素详解

  # 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         <tr class="odd">
37             <td class="l square"><a 
38 href="https://www.baidu.com/">工程师(上饶3)</a></td>
39             <td>管理类</td>
40             <td>3</td>
41             <td>上饶</td>
42             <td>2020-3-3</td>
43         </tr>
44     </tbody>
45 </table>
46 """
47 
48 soup = BeautifulSoup(text, 'lxml')
49 # 1、获取所有tr标签
50 trs = soup.select('tr')
51 for tr in trs:
52     print(tr)
# 2、获取第2个tr标签
1 # 2、获取第2个tr标签
2 tr = soup.select('tr')[1]
3 print(tr)
# 3、获取所有class等于even的tr标签
1 # 3、获取所有class等于even的tr标签
2 # 方法一:
3 trs1 = soup.select('tr.even')
4 for tr1 in tr1:
5     print(tr1)
6 # 方法二:
7 trs2 = soup.select('tr[class="even"]')
8 for tr1 in trs2:
9     print(tr1)
# 4_1、将所有id等于test,class也等于test的所有a标签提取出
selcet&CSS无法实现
# 4_2、获取所有a标签下href属性的值  bs4中的select()功能与CSS无关
1 # 4_2、获取所有a标签下href属性的值
2 ahs = soup.select('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、获取所有的职位信息(纯文本)  bs4中的select()功能与CSS无关
 1 # 5、获取所有的职位信息(纯文本)
 2 trs = soup.select('tr')[1:]     # 从第二个tr开始获取
 3 movies = []
 4 for tr in trs:
 5     movie = {}
 6     # 获取tr下所有非标签字符
 7     # infos= list(tr.strings)
 8     # 获取tr下所有非标签&非空白字符
 9     infos = list(tr.stripped_strings)
10     #print(infos)
11     movie['title'] = infos[0]
12     movie['category'] = infos[1]
13     movie['num'] = infos[2]
14     movie['city'] = infos[3]
15     movie['time'] = infos[4]
16     movies.append(movie)
17 
18 print(movies)