BeautifulSoup
Posted 114811yayi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeautifulSoup相关的知识,希望对你有一定的参考价值。
#!/usr/bin/env python # coding: utf-8 # In[3]: from bs4 import BeautifulSoup # # BeautifulSoup介绍 # 1、BeautifulSoup是基础html DOM的,会载入整个文档构建整个DOM树,因此时间和内存开销大,性能也就更低,而lxml只是进行局部的遍历 # # 2、BeautifulSoup只能读取字符串格式,不能从文件中读取 # # In[49]: text = ‘‘‘ <tr class="h"> <td class="l" width="374">职位名称</td> <td>职位类别</td> <td>人数</td> <td>地点</td> <td>发布时间</td> </tr> <tr class="even"> <td class="l square" id=‘ceshi‘><a target="_blank" href="position_detail.php?id=47281&keywords=&tid=87&lid=0">PCG04-腾讯新闻高级android开发工程师(北京)</a></td> <td>技术类</td> <td>1</td> <td>北京</td> <td>2019-01-23</td> </tr> <tr class="odd"> <td class="l square"><a target="_blank" href="position_detail.php?id=47280&keywords=&tid=87&lid=0">28603-113 微信支付智慧营销开发工程师(深圳)</a></td> <td>技术类</td> <td>1</td> <td>深圳</td> <td>2019-01-23</td> </tr> <tr class="even"> <td class="l square"><a target="_blank" href="position_detail.php?id=47270&keywords=&tid=87&lid=0">27020-量子实验室后台开发工程师(深圳)</a></td> <td>技术类</td> <td>2</td> <td>深圳</td> <td>2019-01-23</td> </tr> <tr class="odd"> <td class="l square"><a target="_blank" href="position_detail.php?id=47263&keywords=&tid=87&lid=0">22989-腾讯云售中交付技术总监(深圳)</a></td> <td>技术类</td> <td>1</td> <td>深圳</td> <td>2019-01-23</td> </tr> <tr class="even"> <td class="l square"><a target="_blank" href="position_detail.php?id=47258&keywords=&tid=87&lid=0">PCG04-测试开发工程师(北京)</a></td> <td>技术类</td> <td>1</td> <td>北京</td> <td>2019-01-23</td> </tr> <tr class="odd"> <td class="l square"><a target="_blank" href="position_detail.php?id=47259&keywords=&tid=87&lid=0">PCG04-AI评价优化高级工程师(深圳)</a></td> <td>技术类</td> <td>1</td> <td>深圳</td> <td>2019-01-23</td> </tr> <tr class="even"> <td class="l square"><a target="_blank" href="position_detail.php?id=47260&keywords=&tid=87&lid=0">PCG04-腾讯新闻高级后台开发工程师(北京)</a></td> <td>技术类</td> <td>1</td> <td>北京</td> <td>2019-01-23</td> </tr> <tr class="odd"> <td class="l square"><a target="_blank" href="position_detail.php?id=47261&keywords=&tid=87&lid=0">17757-前端开发工程师(北京)</a></td> <td>技术类</td> <td>1</td> <td>北京</td> <td>2019-01-23</td> </tr> <tr class="even"> <td class="l square"><a target="_blank" href="position_detail.php?id=47262&keywords=&tid=87&lid=0">30359-高级服务器开发工程师</a></td> <td>技术类</td> <td>1</td> <td>深圳</td> <td>2019-01-23</td> </tr> <tr class="odd"> <td class="l square"><a target="_blank" href="position_detail.php?id=47252&keywords=&tid=87&lid=0">25927-高级手游适配测试经理</a></td> <td>技术类</td> <td>1</td> <td>上海</td> <td>2019-01-23</td> </tr> <tr class="f"> <td colspan="5"> <div class="left">共<span class="lightblue total">1424</span>个职位</div> <div class="right"><div class="pagenav"><a href="javascript:;" class="noactive" id="prev">上一页</a><a class="active" href="javascript:;">1</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=10#a">2</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=20#a">3</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=30#a">4</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=40#a">5</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=50#a">6</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=60#a">7</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=70#a">...</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=1420#a">143</a><a href="position.php?lid=&tid=87&keywords=请输入关键词&start=10#a" id="next">下一页</a><div class="clr"></div></div></div> <div class="clr"></div> </td> ‘‘‘ # In[29]: # 建立一个BeautifulSoup对象,传入需要解析的字符串并且传入需要用那种进行解析 bs = BeautifulSoup(text,‘lxml‘) # In[30]: print(bs.prettify()) # 是html代码规范化,可以自动补全缺失的标签 # # bs4库的使用方法 # In[18]: # 1、获取所有的td 标签 get_all_tds = bs.find_all(‘td‘) # 返回的是一个列表类型 for get_all_td in get_all_tds: print(get_all_td) print(‘===‘*30) # In[21]: # 2、获取第二个td标签 # 在find_all方法里面有个参数:limit ,如果你不想获取太多的数据的话可以使用这个参数,limit等于几就获取几个数据,我只想获取第二个数据 print(bs.find_all(‘td‘,limit=2)[1]) # In[23]: # 3、获取所有class=‘l square’的td标签 get_squares = bs.find_all(‘td‘,class_=‘l square‘) for square in get_squares: print(square) # In[25]: # 也可以用attrs来获取 get_squares = bs.find_all(‘td‘,attrs={‘class‘:‘l square‘}) for square in get_squares: print(square) # In[31]: # 4、获取多个条件的字符串,比如:<td class="l square" id=‘ceshi‘> 获取class= square id = ceshi的td标签 get_squares = bs.find_all(‘td‘,class_=‘l square‘,id=‘ceshi‘) for square in get_squares: print(square) # In[32]: # 也可以用attrs来获取 get_squares = bs.find_all(‘td‘,attrs={‘class‘:‘l square‘,‘id‘:‘ceshi‘}) for square in get_squares: print(square) # In[34]: #5、获取a标签中的href属性值 # 有两种方法,第一种:相对比较简单和方便 a_tag_lists = bs.find_all(‘a‘) for a_tag_list in a_tag_lists: href = a_tag_list[‘href‘] print(href) # In[35]: # 第二种方法,利用attrs a_tag_lists = bs.find_all(‘a‘) for a_tag_list in a_tag_lists: href = a_tag_list.attrs[‘href‘] print(href) # In[40]: # 6、获取所有职位的信息(文本数据,不包含html代码) 你想获取所有的字符串,可以直接bs.strings,但是如果有空格的话 # 是不会剔除的,bs.stripped_strings获取所有字符串的时候可以剔除空格 mess_lists = bs.find_all(‘td‘) print(mess_lists[0].string) # for mess_list in mess_lists: # print(mess_list.string) # print(‘---‘*30) # ## 总结 # #### find_all的使用方法: # 1、在提取标签的时候,第一个参数是标签的名字,然后想通过标签属性进行过滤的时候,可以在这个方法中通过关键字参数的 # 形式,将属性值的名字和对应的字传入进去,或者使用attrs属性,将所有的属性和值以字典的形式传入进去 # # 2、不想提取太多数据的时候可以用limit参数限制提取多少个 #
以上是关于BeautifulSoup的主要内容,如果未能解决你的问题,请参考以下文章
Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段
python 爬虫 requests+BeautifulSoup 爬取简单网页代码示例
python3 requests + BeautifulSoup 爬取阳光网投诉贴详情实例代码
使用 Python 和 BeautifulSoup(将网页源代码保存到本地文件中)