python爬虫基础--Beautiful Soup

目录

知识点回顾

Beautiful Soup简介

 安装Beautiful Soup库

在Linux系统上的安装方法:

在macOS系统的安装方法:

在Windows系统的安装方法:

 安装lxml(可选)

用虚拟环境保存库文件 

创建虚拟环境

 各类解析器

三大对象种类

 案例代码

Tag

注意

获取属性 

 NavigableString获取内容

Comment

Beautiful Soup进阶使用

find_all() 搜索文档树

字符串

正则表达式

列表

keyword

True

按CSS搜索

 按属性的搜索

CSS选择器


知识点回顾

正则表达式速查及简单使用

详见:python爬虫--正则表达式_我还可以熬_的博客-CSDN博客

Beautiful Soup简介

“美味的汤,绿色的浓汤,

 在热气腾腾的盖碗里装!

 谁不愿意尝一尝,这样的好汤?

 晚餐用的汤,美味的汤!”

Beautiful Soup库的名字取自刘易斯·卡罗尔在《爱丽丝梦游仙境》里的同名诗歌。

Beautiful Soup通过定位HTML标签来格式化和组织复杂的网页信息,用简单易用的python对象为我们展现XML信息结构。

                                                                                       ----------《python网络爬虫权威指南》

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,仅仅需要说明一下原始编码方式就可以了

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度

 安装Beautiful Soup库

Beautiful Soup并不是python的基础库,所以我们需要单独安装。

在Linux系统上的安装方法:

sudo apt-gat install python-bs4

在macOS系统的安装方法:

pip install beautifulsoup4

在Windows系统的安装方法:

pip install beautifulsoup4

 安装lxml(可选)

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐安装

pip install lxml

用虚拟环境保存库文件 

使用虚拟环境可以维持python原环境的整洁,减少已安装库之间的冲突。

创建虚拟环境

virtualenv +环境名

 然后就可以在这个环境中安装并使用BeautifulSoup了。

 各类解析器

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup, “html.parser”)1. Python的内置标准库 2. 执行速度适中 3.文档容错能力强Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器BeautifulSoup(markup, “lxml”)1. 速度快 2.文档容错能力强需要安装C语言库
lxml XML 解析器BeautifulSoup(markup, [“lxml”, “xml”]) BeautifulSoup(markup, “xml”)1. 速度快 2.唯一支持XML的解析器 3.需要安装C语言库
html5libBeautifulSoup(markup, “html5lib”)1. 最好的容错性 2.以浏览器的方式解析文档 3.生成HTML5格式的文档 4.速度慢不依赖外部扩展

三大对象种类

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:

  • Tag
  • NavigableString
  • Comment

 案例代码

from bs4 import BeautifulSoup
from bs4 import Comment

html = '''
<title>小林</title>
<div class='info' float='left'>Welcome to xiaolin_world</div>
<div class='info' float='right'>
  <span>Good Good Study</span>
  <a href='www.baidu.com'></a>
  <strong><!--没用--></strong>
</div>
'''

 

Tag

通俗点讲就是 HTML 中的一个个标签

例如:<div> <title>

bs = BeautifulSoup(html,'lxml')

print(bs.title) 
print(bs.div)
print(bs.span)

注意

相同的标签只能获取第一个符合要求的标签

获取属性 

print(bs.div.attrs) # 获取全部属性
print(bs.a.get('href')) # www.baidu.com 
print(bs.a['href']) #效果跟上面的一样

 NavigableString获取内容

print(bs.div.string)  # Welcome to xiaolin_world
print(bs.div.text)   # Welcome to xiaolin_world
# string 提取可用的数据
# text解析了标签

Comment

Comment 对象是一个特殊类型的 NavigableString 对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对我们的文本处理造成意想不到的麻烦

if type(bs.strong.string) == Comment:
  print(bs.strong.prettify())
else:
  print(bs.strong.string)

Beautiful Soup进阶使用

find_all() 搜索文档树

Beautiful Soup定义了很多搜索方法,这里着重介绍find_all() 其它方法的参数和用法类似

字符串

传入一个字符串参数,Beautiful Soup会查找与字符串完整匹配的内容

#返回所有的div标签
print(soup.find_all('div'))

正则表达式

传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容

#返回所有的div标签
print (soup.find_all(re.compile("^div")))

列表

传入列表参数,Beautiful Soup会将与列表中任一元素匹配的内容返回

#返回所有匹配到的span a标签
print(soup.find_all(['span','a']))

keyword

传入一个id 的参数,Beautiful Soup会搜索每个tag的”id”属性

#返回id为welcom的标签
print(soup.find_all(id='welcome'))

True

True 可以匹配任何值,下面代码查找到所有的tag,但是不会返回字符串节点

按CSS搜索

传入一个css,通过 class_ 参数搜索有指定CSS类名的tag

# 返回class等于info的div
print(soup.find_all('div',class_='info'))

 按属性的搜索

soup.find_all("div", attrs={"class": "info"})

CSS选择器

soup.select(参数)

表达式说明
tag选择指定标签
*选择所有节点
#id选择id为container的节点
.class选取所有class包含container的节点
li a选取所有li下的所有a节点
ul + p(兄弟)选择ul后面的第一个p元素
div#id > ul(父子)选取id为id的div的第一个ul子元素
table ~ div选取与table相邻的所有div元素
a[title]选取所有有title属性的a元素
a[class=”title”]选取所有class属性为title值的a
a[href*=”sxt”]选取所有href属性包含sxt的a元素
a[href^=”http”]选取所有href属性值以http开头的a元素
a[href$=”.png”]选取所有href属性值以.png结尾的a元素
input[type="redio"]:checked选取选中的hobby的元素

--------------------------------------------------------------------- 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还可以熬_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值