Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航、查找、修改文档的方式。
Beautiful Soup 4 官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
下面是抓取博客园首页一些信息的使用实例。

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
.....................后面内容太长了省略....................

 

版权声明:本文为gdjlc原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gdjlc/p/11400523.html