Beautiful Soup

1. 简介

简单来说,Beautiful Soup是Python的一个HTML或XML的解析库,用它可以方便的从网页中提取数据。
Beautiful Soup解析时实际上依靠解析器,支持的解析器如下:

解析器使用方法
Python标准库BeautifulSoup(markup,“html.parser”)
lxml HTML解析库BeautifulSoup(markup,“lxml”)
lxml XML解析库BeautifulSoup(markup,“xml”)
html5libBeautifulSoup(markup,“html5lib”)
2. 使用方法
2.1 结点选择器(功能较弱但速度快)

1.选择元素:注意,当有多个结点匹配时,只选择第一个。

<ul>
	<li class="item-0 item-1"><a href="0.html">item 0 </a></li>
	<li class="item-1"><a href="1.html">item 1 </a></li>
</ul>       
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,"lxml")
print(soup.ul.li) #type: bs4.element.Tag
#关联选择:直接子节点
print(soup.ul.contents) #type: list,既包含文本又包含节点
print(soup.ul.children) #type: list_iterator
for child in soup.ul.children:  #type_child:文本部分为bs4.element.NavigableString
	print(child)				   		   #节点部分为bs4.element.Tag
#关联选择:所有子孙结点
print(soup.ul.descendants) #type:generator
for i,child in enumerate(soup.ul.descendants):
	print(i,child)					#type_child同上
#关联选择:父节点,祖先节点
print(soup.a.parent)
print(list(soul.a.parents))
#关联选择:兄弟节点(同级节点)
print(soup.li.next_sibling) #type:bs4.element.Tag
print(list(enumerate(soup.li.next_siblings)))
print(soup.li.previous_sibling)
print(list(enumerate(soup.li.previous_siblings)))
2.2 提取信息
#获取名称
print(soup.title.name) #type: str
#获取属性
print(soup.li.attrs) #type: dict
print(soup.li.attrs["class"]) #type: list
print(soup.ul["class"]) #type: list
print(list(soup.a.parents)[0]["class"])#结果与上一个相同
#获取内容
print(soup.title.string)
2.3 方法选择器
查询方法结果
find_all()查找所有符合条件的元素
find()find_all()第一个匹配的元素
find_parent()返回直接父节点
find_parents()返回祖先节点
find_next_sibling()返回后面第一个兄弟节点
find_next_siblings()返回后面所有兄弟节点
find_previous_sibling()返回前面第一个兄弟节点
find_previous_siblings()返回前面所有兄弟节点
find_next()返回第一个符合条件的结点
find_all_next()返回后面所有符合条件的结点
find_previous()、find_all_previous()
<ul>
	<li class="item-0"><a href="0.html">item 0 </a>hello
	</li>
</ul>       

方法示例:

#find_all(name,attrs,recursive,text,**kwargs)
#name:
print(soup.find_all(name='li')) #type:list
print(soup.find_all(name='li')[0]) #type:bs4.element.Tag
#attrs:传入字典
print(soup.find_all(attrs={'class':'item-0'}))#type同上
#text:匹配节点的文本,传入可以使字符串,也可以是正则表达式对象
print(soup.find_all(text=re.compile('hello'))#['hello\n        '],返回有文本组成的list
2.4 CSS选择器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值