Beautiful Soup(bs4)库和lxml库

目录

Beautiful Soup库

获取单个元素

获取多个亲属元素

获取符合条件的所有元素(find_all过滤)

css选择器(select()方法)

lxml库


Beautiful Soup中文官方文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/

beautifulsoup安装:pip install beautifulsoup4

安装解析器:pip install lxml             或者       pip install -i https://mirrors.aliyun.com/pypi/simple/ lxml

Beautiful Soup库

from bs4 import BeautifulSoup

html_str = '''
<div class="shufa-topbar">
	<div class="shufa-topbar-main">
    	<div class="shufa-topbar-link"><a href="http://www.shufaai.com/" target="_blank">书法爱</a>www.shufaai.com<a href="http://www.shufaai.com/" target="_blank">书法</a>爱好者学习平台</div>
		<div class="shufa-topbar-extend">
               <span><a href="http://www.shufaai.com/" target="_blank">书法爱好者</a><i>|</i><a href="http://www.shufaai.com/a/zidian/" target="_blank">书法字典</a></span>
        </div>
        <div class="shufa-topbar-link"><a href="http://www.shufaai.com/" target="_blank">书法爱2</a>www.shufaai.com<a href="http://www.shufaai.com/" target="_blank">书法</a>爱好者学习平台</div>        
    </div>
</div>
'''

# 创建对象,括号中的参数是html文档(可以打开外部存储html文档的文件BeautifulSoup(open("index.html")),或者直接使用当前文件中的html字符串对象)和解析器名称
soup = BeautifulSoup(html_str,'lxml')

获取单个元素

# 1、获取标签,对象名.标签名,获取的对象为对应标签中的第一个元素
print(soup.a)
# 2、获取属性值,对象名.标签名['属性名']
print(soup.a['href'])
# 3、获取标签中的文本内容,对象名.标签名.text
print(soup.a.text)

获取多个亲属元素

# 1、获取所有儿子标签元素内容,返回一个迭代器对象
print(list(soup.div.children))
# 2、获取所有儿子标签元素内容,存储在列表中
print(soup.div.contents)
# 3、获取所有的后代元素,返回一个生成器对象
print(list(soup.div.descendants))
# 4、next_sibling用来获取后一个兄弟元素
print(soup.div.div.div.next_sibling.next_sibling)
# 5、next_siblings获取后面所有的兄弟元素,并返回一个迭代器对象
print(list(soup.div.div.div.next_sibling.next_siblings))
# 6、previous_sibling获取前一个兄弟元素
print(list(soup.div.div.div.next_sibling.next_siblings)[2].previous_sibling.previous_siblings)
# 7、previous_siblings获取前面所有的兄弟元素,并返回一个迭代器对象
print(list(list(soup.div.div.div.next_sibling.next_siblings)[2].previous_sibling.previous_siblings))
# 8、获取所有的父辈元素,返回一个生成器对象
print(list(soup.div.div.div.next_sibling.next_sibling.parents))

获取符合条件的所有元素(find_all过滤)

'''
常用参数介绍:
find_all(self, name=None, attrs={}, recursive=True, text=None,limit=None, **kwargs)
name:标签名查找
attrs:属性查找
recursive:是否递归,如果false,只能查找到符合对应的子元素
text:通过标签元素的文本内容获取
limit:设置返回的设置数量的结果
'''
print(soup.find_all('a'))
print(soup.find_all(attrs={"target":"_blank"}))
print(soup.find_all('a',text='书法爱'))

css选择器(select()方法)

见:(自动化)https://blog.csdn.net/JBY2020/article/details/111301327

(web网页编写)https://blog.csdn.net/JBY2020/article/details/109633720

print(soup.select('.shufa-topbar-link'))

lxml库

from lxml import etree

html_str = '''
<div class="shufa-topbar">
	<div class="shufa-topbar-main">
    	<div class="shufa-topbar-link"><a href="http://www.shufaai.com/" target="_blank">书法爱</a>www.shufaai.com<a href="http://www.shufaai.com/" target="_blank">书法</a>爱好者学习平台</div>
		<div class="shufa-topbar-extend">
               <span><a href="http://www.shufaai.com/" target="_blank">书法爱好者</a><i>|</i><a href="http://www.shufaai.com/a/zidian/" target="_blank">书法字典</a></span>
        </div>
        <div class="shufa-topbar-link"><a href="http://www.shufaai.com/" target="_blank">书法爱2</a>www.shufaai.com<a href="http://www.shufaai.com/" target="_blank">书法</a>爱好者学习平台</div>        
    </div>
</div>
'''

# 构造html标签对象
page_html = etree.HTML(html_str)

返回对应的标签元素对象

xpath中的参数为xpath表达式:更多方法见(https://blog.csdn.net/JBY2020/article/details/111301327

print(page_html.xpath('//div/a')) 
# @属相名,用来获取属性值
print(page_html.xpath('//div/a/@target'))
# text(),用来获取标签文本内容
print(page_html.xpath('//div/a/text()'))

// 相对路径

/绝对路径

. 当前节点

.. 当前节点的父节点

@根据属性

。。。。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值