BeautifulSoup笔记
find_all的使用:
1.在提取标签的时候,第一个参数是标签的名字。然后如果提取标签的时候想要使用标签属性进行过滤,那么可以在这个方法中通过关键字参数的形式,将属性的名字以及对应的值传进去。或者是使用
'attrs'属性,将所有的属性以及对应的值放在一个字典中传给'atttrs'属性。
2.有些时候,在提取标签的时候,不想提取那么多,那么可以使用'limit'参数。限制提取多少个。
find与find_all的区别:
1.find:找到第一个满足条件的标签就返回。说白了,就是只会返回一个元素。
a = soup.find('a') print(a)
2.find_all:将所有满足条件的标签都返回。说白了,会返回很多标签(以列表的形式)。
使用find和find_all的过滤条件:
1.关键字参数:将属性的名字作为关键字参数的名字,,以及属性的值作为关键字参数的值进行过滤。
2.attrs参数:将属性条件放到一个字典中,传给attrs参数。
获取标签的属性:
1.通过下标获取:通过标签的下标的方式。
href = a['href']
2.通过attrs属性获取:
href = a.attrs['href']
strings和stripped_strings,string属性以及get_text方法:
1.string:获取某个标签下的非标签字符串。返回来的是个字符串。
2.strings:获取某个标签下的子孙非标签字符串。返回来的是个生成器。
3.stripped_strings:获取某个标签下的子孙非标签字符串,会去掉空白字符。返回来的是个生成器。
4.get_text:获取某个标签下的子孙非标签字符串。不是以列表的形式返回。是以普通字符串返回。
tr =soup.find_all('tr')[1] text = tr.get_text() print(text)
1 from bs4 import BeautifulSoup
2
3 html = """
4 <table class="tablelist" cellpadding="0" cellspacing="0">
5 <tbody>
6 <tr class="h">
7 <td class="l" width="374">职位名称</td>
8 <td>职位类别</td>
9 <td>人数</td>
10 <td>地点</td>
11 <td>发布时间</td>
12 </tr>
13 <tr class="even">
14 <td class="l square"><a target="_blank" href="position_detail.php?id=33824&keywords=python&tid=87&lid=2218">22989-金融云区块链高级研发工程师(深圳)</a></td>
15 <td>技术类</td>
16 <td>1</td>
17 <td>深圳</td>
18 <td>2017-11-25</td>
19 </tr>
20 <tr class="odd">
21 <td class="l square"><a target="_blank" href="position_detail.php?id=29938&keywords=python&tid=87&lid=2218">22989-金融云高级后台开发</a></td>
22 <td>技术类</td>
23 <td>2</td>
24 <td>深圳</td>
25 <td>2017-11-25</td>
26 </tr>
27 <tr class="even">
28 <td class="l square"><a target="_blank" href="position_detail.php?id=31236&keywords=python&tid=87&lid=2218">SNG16-腾讯音乐运营开发工程师(深圳)</a></td>
29 <td>技术类</td>
30 <td>2</td>
31 <td>深圳</td>
32 <td>2017-11-25</td>
33 </tr>
34 <tr class="odd">
35 <td class="l square"><a target="_blank" href="position_detail.php?id=31235&keywords=python&tid=87&lid=2218">SNG16-腾讯音乐业务运维工程师(深圳)</a></td>
36 <td>技术类</td>
37 <td>1</td>
38 <td>深圳</td>
39 <td>2017-11-25</td>
40 </tr>
41 <tr class="even">
42 <td class="l square"><a target="_blank" href="position_detail.php?id=34531&keywords=python&tid=87&lid=2218">TEG03-高级研发工程师(深圳)</a></td>
43 <td>技术类</td>
44 <td>1</td>
45 <td>深圳</td>
46 <td>2017-11-24</td>
47 </tr>
48 <tr class="odd">
49 <td class="l square"><a target="_blank" href="position_detail.php?id=34532&keywords=python&tid=87&lid=2218">TEG03-高级图像算法研发工程师(深圳)</a></td>
50 <td>技术类</td>
51 <td>1</td>
52 <td>深圳</td>
53 <td>2017-11-24</td>
54 </tr>
55 <tr class="even">
56 <td class="l square"><a target="_blank" href="position_detail.php?id=31648&keywords=python&tid=87&lid=2218">TEG11-高级AI开发工程师(深圳)</a></td>
57 <td>技术类</td>
58 <td>4</td>
59 <td>深圳</td>
60 <td>2017-11-24</td>
61 </tr>
62 <tr class="odd">
63 <td class="l square"><a target="_blank" href="position_detail.php?id=32218&keywords=python&tid=87&lid=2218">15851-后台开发工程师</a></td>
64 <td>技术类</td>
65 <td>1</td>
66 <td>深圳</td>
67 <td>2017-11-24</td>
68 </tr>
69 <tr class="even">
70 <td class="l square"><a target="_blank" href="position_detail.php?id=32217&keywords=python&tid=87&lid=2218">15851-后台开发工程师</a></td>
71 <td>技术类</td>
72 <td>1</td>
73 <td>深圳</td>
74 <td>2017-11-24</td>
75 </tr>
76 <tr class="odd">
77 <td class="l square"><a id="test" class="test" target='_blank' href="position_detail.php?id=34511&keywords=python&tid=87&lid=2218">SNG11-高级业务运维工程师(深圳)</a></td>
78 <td>技术类</td>
79 <td>1</td>
80 <td>深圳</td>
81 <td>2017-11-24</td>
82 </tr>
83 </tbody>
84 </table>
85 """
86
87 # 1.获取所有tr标签
88 # 2.获取第2个tr标签
89 # 3.获取所有class等于even的tr标签
90 # 4.将所有id等于test,class也等于test的a标签提取出来
91 # 5.获取所有a标签的href属性
92 # 6.获取所有的职位信息(纯文本)
93
94 soup = BeautifulSoup(html,'lxml')
95
96 # 1.获取所有tr标签
97 trs = soup.find_all('tr')
98 for tr in trs:
99 print(tr)
100 print('*'*30)
101
102 # 2.获取第2个tr标签
103 trs = soup.find_all('tr',limit=2)[1]
104 print(trs)
105
106 # 3.获取所有class等于even的tr标签
107 trs = soup.find_all('tr',class_='even')
108 for tr in trs:
109 print(tr)
110 print('*'*30)
111
112 trs = soup.find_all('tr',attrs={'class':'even'})
113 for tr in trs:
114 print(tr)
115 print('*'*30)
116
117 # 4.将所有id等于test,class也等于test的a标签提取出来
118 alist = soup.find_all('a',class_='test',id='test')
119 for a in alist:
120 print(a)
121
122 # 5.获取所有a标签的href属性
123 alist = soup.find_all('a')
124 for a in alist:
125 # 1. 通过下标操作的方式
126 href = a['href']
127 print(href)
128
129 # 2. 通过attrs属性的方式
130 href = a.attrs['href']
131 print(href)
132
133 # 6.获取所有的职位信息(纯文本)
134 trs = soup.find_all('tr')[1:]
135 movies = []
136 # 1.
137 for tr in trs:
138 movie = {}
139 tds = tr.find_all('td')
140 title = tds[0].string
141 category = tds[1].string
142 nums = tds[2].string
143 city = tds[3].string
144 pubtime = tds[4].string
145 movie['title'] = title
146 movie['category'] = category
147 movie['nums'] = nums
148 movie['city'] = city
149 movie['pubtime'] = pubtime
150 movies.append(movie)
151
152 print(movies)
153
154 #2.
155 for tr in trs:
156 movie = {}
157 # infos = list(tr.strings)
158 infos = list(tr.stripped_strings)
159 movie['title'] = infos[0]
160 movie['category'] = infos[1]
161 movie['nums'] = infos[2]
162 movie['city'] = infos[3]
163 movie['pubtime'] = infos[4]
164 movies.append(movie)
165 print(movies)

浙公网安备 33010602011771号