spider-bs4

文档

中文文档

使用-bs4如何选择文档中的元素

  • 安装

bs4是一个可以从HTML或XML文件中提取数据的Python库.除了安装bs4模块,还需要安装文档解析器,以lxml HTML 解析器为例,通常使用该解析器

pip install lxml

  • 使用,以一段html文档为例,使用bs4来对其进行解析
from bs4 import BeautifulSoup
html = '''
<title name='bbb'>
    <h2>2222222222222222222</h2>
    <p>123123123</p>
    <h1>99999999999999</h1>
    豆瓣读书
</title>
    
<title name='ccc' class='2'>
    豆瓣电影
</title>

'''
soup = BeautifulSoup(html, 'lxml')
  • 节点选择器:只选择第一个匹配到的标签元素
# 节点选择器:只选择第一个匹配到的标签元素
# 标签选择
print(soup.title)
print('===================================')

# 标签名称
print(soup.title.name)
print('===================================')

# 标签内容
print(soup.title.text)
print('===================================')

# 标签指定内容选择:豆瓣读书
print(list(soup.title))
print(list(soup.title)[6].strip()) # 去除头尾空格
print('===================================')

# 标签属性选择:获取标签属性两种方法
print(soup.title.attrs['name'], soup.title['name'])
print('===================================')

# 嵌套选择标签
print(soup.title.h2)
print(soup.title.h2.text)


结果:
<title name="bbb">
<h2>2222222222222222222</h2>
<p>123123123</p>
<h1>99999999999999</h1>
    豆瓣读书
</title>
===================================
title
===================================

2222222222222222222
123123123
99999999999999
    豆瓣读书

===================================
['\n', <h2>2222222222222222222</h2>, '\n', <p>123123123</p>, '\n', <h1>99999999999999</h1>, '\n    豆瓣读书\n']
豆瓣读书
===================================
bbb bbb
===================================
<h2>2222222222222222222</h2>
2222222222222222222
  • 方法选择器
# 方法选择器
# 根据节点名name来选择节点
print(soup.find(name='title'))
print(soup.find_all(name='title'))
print('===================================')

# 选择指定节点
print(soup.find_all(name='title')[1])
print('===================================')

# 根据属性attrs来选择节点
print(soup.find(attrs={'name':'ccc'}))
print('===================================')

# 根据文本text来匹配节点文本
print(soup.find(text='123123123'))  # 注意需要一个完整的字符串,换行符也包含在其中
print(soup.find(text=re.compile('电影')))
print('===================================')


<title name="bbb">
<h2>2222222222222222222</h2>
<p>123123123</p>
<h1>99999999999999</h1>
    豆瓣读书
</title>
[<title name="bbb">
<h2>2222222222222222222</h2>
<p>123123123</p>
<h1>99999999999999</h1>
    豆瓣读书
</title>, <title class="2" name="ccc">
    豆瓣电影
</title>]
===================================
<title class="2" name="ccc">
    豆瓣电影
</title>
===================================
<title class="2" name="ccc">
    豆瓣电影
</title>
===================================
123123123

    豆瓣电影

===================================
  • CSS选择器
# Css选择器
# 根据标签名选择节点
print(soup.select('title'))
print('===================================')

# 根据属性选择节点:带有class属性的title节点
print(soup.select('title[class]'))
print('===================================')

# 根据属性值选择节点
print(soup.select('title[name="ccc"]'))
print('===================================')

# 获取节点的文本内容
print(soup.select('title')[0].text)
print(soup.select('title')[0].get_text())
print('===================================')

# 获取节点属性值
print(soup.select('title')[0]['name'])
print('===================================')

# css选择器 或者
print(soup.select('title h2,h1'))



结果:
[<title name="bbb">
<h2>2222222222222222222</h2>
<p>123123123</p>
<h1>99999999999999</h1>
    豆瓣读书
</title>, <title class="2" name="ccc">
    豆瓣电影
</title>]
===================================
[<title class="2" name="ccc">
    豆瓣电影
</title>]
===================================
[<title class="2" name="ccc">
    豆瓣电影
</title>]
===================================

2222222222222222222
123123123
99999999999999
    豆瓣读书


2222222222222222222
123123123
99999999999999
    豆瓣读书

===================================
bbb
===================================
[<h2>2222222222222222222</h2>, <h1>99999999999999</h1>]

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值