BeautifulSoup常用用法详解

解析库

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

基本使用

格式化html

soup.prettify

from bs4 import BeautifulSoup
soup = BeautifulSoup(html,"lxml")
print(soup.prettify())#格式化html

获取标签

soup.p
soup.title

如果有多个相同名字的标签,只会获得第一个

获取属性

soup.p[“name”]

获取name属性

获取内容

soup.p.string

获取p标签中的文字

嵌套选择

soup.head.title.string

标签可以嵌套选择

获取子节点

soup.p.contents

返回一个包含子节点的列表,每一项是一个子节点
soup.p.children
返回的是一个迭代器,需要通过打印才能查看

for i,chlild in enumerate(soup.p.children):
	print(i,child)

获取所有的子孙节点

soup.p.descendants

for i,child in enumerate(soup.p.descendants):
	print(i,chlid)

获取父节点

soup.p.parent

获取所有的祖先节点

soup.p.parents

print(list(enumerate(soup.p.parents)))

获取兄弟节点

soup.p.next_siblings
soup.p.previous_siblings

print(list(enumerate(soup.p.next_siblings)))
print(list(enumerate(soup.p.previous_siblings))

标准选择器

name

soup.find_all(“ul”)[0]

attrs

soup.find_all(attrs = {‘id’:‘list-1’})

text

soup.find_all(text=“Foo”)

find

返回查找到的第一个元素,find_all是返回所有的

find_parents() find_parent

find_next_siblings() find_next_sibling()

find_previous_siblings() find_previous_sibling()

find_all_next() find_next()

find_all_previous() find_previous

CSS选择器

soup.select(’.panel .panel_are’)

.panel代表class = panel,父节点与子节点之间用“ ”空格分隔开

soup.select(’#list_2’)

#list_2代表id = list_2

soup.select(‘ul’)[0]

标签直接写

获取属性

for ul in soup.select(“ul”):
print(ul[‘id’])

获取内容

for ul in soup.select(“ul”):
print(ul.get_text())

总结

  1. 主要使用lxml,必要时使用html.parser
  2. 标签选择器筛选功能弱但是速度快
  3. 建议使用find(),find_all()查询单个或者多个结果
  4. 对CSS熟悉使用select方法
  5. 记住常用的获取属性和文本的方法
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值