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)

 

posted @ 2019-08-09 16:03  --千山--  阅读(38)  评论(0)    收藏  举报