爬虫之网页解析器BeautifulSoup

BeautifulSoup 是 Python 的一个 HTML 或 XML 的解析库,可以用它从网页中提取数据。它是借助网页的结构和属性等特性来解析网页的工具,有了它就不用再去写一些复杂的正则,只需要简单的几条语句就可以完成网页中某个元素的提取。它自动将输入文档转换为 Unicode 编码,输出文档转换为 UTF-8 编码。
Unicode 编码特点:长度固定,编码用 2 个 Byte,所占用的空间比 ASCII 码多一倍(内容都是英文);
UTF-8 编码特点:可变长编码,英文占 1 个 Byte,汉字一般占 3 个 Byte,生僻字一般占 4-6 个 Byte。

BeautifulSoup 的用法:

1. 创建 BeautifulSoup 对象
from bs4 import BeautifulSoup
soup = BeautifulSoup (html_doc, ‘html.parser’, from_encoding=’utf-8’)
第一个参数是html文档字符串,第二个参数为html解析器,第三个为html的编码方式

2. 搜索节点:(find 和 find_all)
#方法find(name, attrs, string)
其中,name 节点名称;attrs 为属性;string 为节点文字 find_all 方法一样
例子:
1、查找所有标签为 a 的节点
soup.find_all(‘a’)

2、查找标签为 a 链接符合 /view/123.htm 形式的节点
soup.find_all (‘a’, href = '/view/123.htm ')
soup.find_all (‘a’, href = re.compile (r’/view/\d+.htm))
对于它的名称,属性和文字,都可传入一个正则表达式来匹配

3、查找标签为 div,属性 class 为 abc,文字为 Python 的节点
soup.find_all (‘div’, class_ = “abc”, string = ’Python’)
‘class’ 后加了下划线的原因:python 的关键字有 class,bs 为了避免冲突,加了一个’_’

3.访问节点的内容
soup.a.name       # 获取 a 标签的名字
soup.a.parent.name  # a 标签的父标签的名字
soup.title           # 获取 html 的 title 标签的信息
type(soup.a)        # 查看 a 标签的类型
soup.a.attrs        # 获取 a 标签的所有属性
type(soup.a.attrs)    # 查看 a 标签属性的类型
soup.a.attrs [‘class’]   # 如果是字典,则通过字典的方式获取a标签的class属性
soup.a.string        # a 标签的非属性字符串信息,表示尖括号之间的那部分字符串
type(soup.a.string)    # 查看标签 string 字符串的类型
soup.a.get_text()     # 获取节点的链接文字

4. BeautifulSoup 中各种 html 解析器的比较
html.parser:python 自身带有 速度比较快 Python 2.7.3 or 3.2.2 前的版本中文档容错能力差
lxml:速度快 兼容性好 需安装 C 语言库
xml:速度快 唯一支持 XML 的解析器 需安装 C 语言库
html5lib:兼容性很好 可以像 web 浏览器一样解析 html 页面生成 HTML5 格式的文档 但速度慢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值