自己是在安装的anaconda中默认带了以下相关的python数据包requests,re,BeautifulSoup,time,pymongo(mango数据库python包)
Beautiful Soup
Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。官方解释如下:
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。
1.BeautifulSoup对象使用方式
|
|
- 可以自己创建一个字符串来进行演示
|
|
也可以自己根据requests包自己爬取网站页面
|
|
创建BeautifulSoup对象
1234soup = BeautifulSoup(html)# BeautifulSoup(html, 解析方式) 可以起到同样的效果,不添加的话使用默认的python解析器,不同的解析器,效率上容错上...会有不同的效果soup = BeautifulSoup(html, "lxml") # 比较常用soup = BeautifulSoup(open(url))常用解析方式:
解析器 | 使用方法 | 优势 | 劣势 |
---|---|---|---|
Python标准库 | BeautifulSoup(markup, “html.parser”) | Python的内置标准库 执行速度适中 文档容错能力强 | Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差 |
lxml HTML 解析器 | BeautifulSoup(markup, “lxml”) | 速度快 文档容错能力强 | 需要安装C语言库 |
lxml XML 解析器 | BeautifulSoup(markup, [“lxml”, “xml”])BeautifulSoup(markup, “xml”) | 速度快 唯一支持XML的解析器 | 需要安装C语言库 |
html5lib | BeautifulSoup(markup, “html5lib”) | 最好的容错性 以浏览器的方式解析文档 生成HTML5格式的文档 | 速度慢 不依赖外部扩展 |
打印soup对象
1print soup.prettify()四大对象种类
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
Tag
1.soup.tag (soup.a , soup.p , soup.title , soup.head)
2.soup.name (soup.head.name)
3.soup.attrs (soup.head.attrs)
NavigableString
1.获取标签内部文字:soup.p.string
2.检查其类型:type(soup.p.string)
BeautifulSoup
Comment
遍历文档树,详情可参考最底部参考资源BeautifulSoup使用方法,下方同理
搜索文档树
css选择器
##2.BeutifulSoup的select函数
我们在写 CSS 时,标签名不加任何修饰,类名前加点,id名前加 #,在这里我们也可以利用类似的方法来筛选元素,用到的方法是 soup.select(),返回类型是 list
(1)通过标签名查找
|
|
(2)通过类名查找
|
|
(3)通过 id 名查找
|
|
(4)组合查找
组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开
|
|
直接子标签查找
|
|
(5)属性查找
查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到。
|
|
同样,属性仍然可以与上述查找方式组合,不在同一节点的空格隔开,同一节点的不加空格
|
|
豆瓣资源top250音乐信息的获取最后存入mangodb中(包含基本BeautifulSoup的使用以及mangodb在数据库中的使用):
|
|
参考资源:
Python爬虫之豆瓣音乐及糗事百科&version=12020810&nettype=WIFI&fontScale=100&pass_ticket=9HuecF4Fn%2Bwkp5Hcj9sVGabHbkLDSDE%2F3zEtwlsxR8UH%2FNkF7JnI%2BiPwdME3e8pS)