多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
我们可以调用`soup.find(css选择器)`、`soup.find_all(css选择器)`,`soup.select(css选择器)`来根据CSS选择器获取指定的元素。 ```python # 标签选择器 soup.select('img') # 类名选择器 soup.select('.sister') # id选择器 soup.select('#sister') # 组合选择器 soup.select('img #sister') # 属性选择器 soup.select('img[src="https://tva1.sinaimg.cn/bmiddle/0080xEK2gy1gntyyf21btj30u0140dje.jpg"]' ``` 使用案例: ```python """ @Date 2021/3/18 """ from bs4 import BeautifulSoup html_doc = """ <table class="tablelist" cellspacing="0" cellpadding="0"> <tbody> <tr class="h"> <td class="1" width="374">职位名称</td> <td>职位类别</td> <td>人数</td> <td>地点</td> <td>发布时间</td> </tr> <tr class="even"> <td class="l"><a href="https://www.baidu.com">区块链高级研发工程师</a></td> <td class="l">技术类</td> <td class="l">1</td> <td class="l">深圳</td> <td class="l">2018-11-25</td> </tr> <tr class="even"> <td><a href="https://www.qq.com">金融云高级后台开发</a></td> <td>技术类</td> <td>2</td> <td>深圳</td> <td>2018-11-24</td> </tr> <tr> <td><a href="https://www.juran.com">高级研发工程师</a></td> <td>技术类</td> <td>2</td> <td>深圳</td> <td>2018-11-24</td> </tr> <tr> <td><a href="https://www.python.com">高级图像算法工程师</a></td> <td>技术类</td> <td>2</td> <td>深圳</td> <td>2018-11-24</td> </tr> <tr> <td><a href="https://www.lg.com" id="test" class="test">高级业务运维工程师</a></td> <td>技术类</td> <td>2</td> <td>深圳</td> <td>2018-11-24</td> </tr> </tbody> </table> """ soup = BeautifulSoup(html_doc, 'lxml') ############ find ############ # 1. 获取首个匹配的tr元素 # tr = soup.find('tr') # 2. 获取该标签下的所有子元素(str) # print(tr.contents) # 3. 返回该元素的所有直接子节点的列表 # print(list(tr.children)) # 4. 返回该元素的直接父节点 # tdf = soup.find('td').parent # print(tdf) ########### find_all ########### # 1. 返回所有tr标签的列表 # trs = soup.find_all('tr') # print(trs) # for tr in trs: # print(tr) # print(type(tr)) # 返回的不是字符串,而是<class 'bs4.element.Tag'> # print("="*30) # 2. 获取第2个tr标签 # tr = soup.find_all('tr', limit=2)[1] # # print(tr) # 3.获取所有class等于even的tr标签 # trs = soup.find_all('tr', class_='even') # trs = soup.find_all('tr', attrs={"class": 'even'}) # for tr in trs: # print(tr) # print("="*30) # 4. 将所有id等于test,class也等于test的a标签提取出来 # alist = soup.find_all('a', attrs={"id": "test", "class": "test"}) # alist = soup.find_all('a', id="test", class_="test") # print(alist) # 5. 获取所有的a标签 # hrefs = soup.find_all('a') # for a in hrefs: # print(a) # (1)获取a标签的href属性 # href = a['hrefs'] # 如果没有取到返回None # (2)获取a标签的href属性 # href = a.get('hrefs') # print(href) # (3)通过attrs属性的方式 # href = a.attrs['hrefs'] # print(href) # 6. 获取所有的职位信息(纯文本) # trs = soup.find_all('tr')[1:] # for tr in trs: # print(tr) # tds = tr.find_all('td') # print(tds) # title = tds[0] # print(title.string) # 获取tr标签的所有文本 # infos = list(tr.strings) # print(infos) # 可以去除空格取纯文本 # infos = list(tr.stripped_strings) # print(infos[0]) ############# select ############## # 1. 获取所有tr标签 # trs = soup.select('tr') # print(trs) # 2. 获取第2个tr标签 # tr = soup.select('tr')[1] # print(tr) # 3. 获取所有class等于even的tr标签 # tr = soup.select('tr.even') # print(tr) # 4. 获取所有的a标签的href属性 # alist = soup.select('a') # for a in alist: # href = a.get('href') # print(href) # 5. 获取所有的tr标签 # trs = soup.select('tr') # for tr in trs: # # 5. 获取所有的职位信息(纯文本) # infos = list(tr.stripped_strings) # print(infos) ```