Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。
Beautiful Soup 4 官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
一、安装Beautiful Soup
运行cmd,cd切换到python安装目录下的Scripts目录,执行命令
pip3 install beautifulsoup4
二、安装解析器lxml
Beautiful Soup支持Python标准库中的HTML解析器,也支持一些第三方的解析器,推荐用lxml,速度快,文档容错能力强,需要安装。
pip3 install lxml
三、使用实例
下面测试抓取博客园首页一些信息
1、简单信息的抓取
import re import requests from bs4 import BeautifulSoup r = requests.get('https://www.cnblogs.com') soup = BeautifulSoup(r.text, 'lxml') #lxml为解析器 print(soup.title, soup.title.string) #获取指定标签,获取指定标签里面的内容 print(soup('title'), soup('title')[0].string) #获取指定标签也可以写成这样 print(soup.meta.get('charset')) #获取指定标签的属性 print(soup.meta['charset']) #获取指定标签的属性也可写成这样 print(soup.meta) #获取第一个标签(多个只取第一个) print(soup.find('meta')) #获取第一个标签,结果和上面一样 print(soup.find('meta', attrs={'name':'viewport'})) #获取第一个标签,根据属性过滤获取 print(soup.find_all('meta', attrs={'charset':True})) #获取所有标签的列表,同时根据是否含有属性charset过滤获取
运行结果:
<title>博客园 - 开发者的网上家园</title> 博客园 - 开发者的网上家园 [<title>博客园 - 开发者的网上家园</title>] 博客园 - 开发者的网上家园 utf-8 utf-8 <meta charset="utf-8"/> <meta charset="utf-8"/> <meta content="width=device-width, initial-scale=1" name="viewport"/> [<meta charset="utf-8"/>]
2、抓取首页的导航条信息
print('抓取导航,实现方法1') for item in soup.select('div#nav_menu a'): print(item.get('href'), item.string) print('抓取导航,实现方法2') for item in soup.find('div', {'id':'nav_menu'}).children: print(item['href'], item.string)
运行结果:
抓取导航,实现方法1 https://home.cnblogs.com/ 园子 https://news.cnblogs.com 新闻 https://q.cnblogs.com/ 博问 https://ing.cnblogs.com/ 闪存 https://group.cnblogs.com/ 小组 https://wz.cnblogs.com/ 收藏 https://job.cnblogs.com/ 招聘 https://edu.cnblogs.com/ 班级 http://zzk.cnblogs.com/ 找找看 抓取导航,实现方法2 https://home.cnblogs.com/ 园子 https://news.cnblogs.com 新闻 https://q.cnblogs.com/ 博问 https://ing.cnblogs.com/ 闪存 https://group.cnblogs.com/ 小组 https://wz.cnblogs.com/ 收藏 https://job.cnblogs.com/ 招聘 https://edu.cnblogs.com/ 班级 http://zzk.cnblogs.com/ 找找看
3、抓取网站分类
print('抓取网站分类,实现方法1') for item in soup.select('ul#cate_item li'): print(item.find('a').get('href'),item.find('a').string) print('抓取网站分类,实现方法2') for item in soup.find_all(id=re.compile('^cate_item_')): print(item.find('a').get('href'),item.find('a').string)
运行结果:
抓取网站分类,实现方法1 /cate/108698/ .NET技术(8) /cate/2/ 编程语言(41) /cate/108701/ 软件设计(0) /cate/108703/ Web前端(10) /cate/108704/ 企业信息化(0) /cate/108705/ 手机开发(3) /cate/108709/ 软件工程(0) /cate/108712/ 数据库技术(9) /cate/108724/ 操作系统(9) /cate/4/ 其他分类(16) /cate/all/ 所有随笔(1571) /comment/ 所有评论(491) 抓取网站分类,实现方法2 /cate/108698/ .NET技术(8) /cate/2/ 编程语言(41) /cate/108701/ 软件设计(0) /cate/108703/ Web前端(10) /cate/108704/ 企业信息化(0) /cate/108705/ 手机开发(3) /cate/108709/ 软件工程(0) /cate/108712/ 数据库技术(9) /cate/108724/ 操作系统(9) /cate/4/ 其他分类(16) /cate/all/ 所有随笔(1571) /comment/ 所有评论(491)
4、抓取首页的所有随笔信息
print('抓取随笔信息') post_item_body = soup.find_all('div', 'post_item_body') for item in post_item_body: print(item.h3.a['href']) print(item.h3.a.string) print(item.p.get_text().strip()) print(item.div.a.string) print(item.div.a.next_sibling.replace('发布于','').strip())
运行结果:
抓取随笔信息 https://www.cnblogs.com/chq1234/p/11400367.html js全选与取消全选 实现全选与取消全选的效果 要求1(将军影响士兵):点击全选按钮,下面的复选框全部选中,取消全选按钮,下面的复选框全部取消 思路:复选框是否被选中,取决于check属性,将全选按钮的check属性值赋值给下面所有复选框的check值 要求2(士兵影响将军): 当下面的某个复选框没有被选中时,全选按钮自 ... 源氏西格玛 2019-08-23 15:36 https://www.cnblogs.com/lenve/p/11400056.html 40 篇原创干货,带你进入 Spring Boot 殿堂! 两个月前,松哥总结过一次已经完成的 Spring Boot 教程,当时感受到了小伙伴们巨大的热情。 两个月过去了,松哥的 Spring Boot 教程又更新了不少,为了方便小伙伴们查找,这里再给大家做一个索引参考。 需要再次说明的是,这一系列教程不是终点,而是一个起点,松哥后期还会不断完善这个教程, ... 江南一点雨 2019-08-23 14:58 .....................后面内容太长了省略....................