BeautifulSoup的使用

最近在搞页面的信息获取,之前一直用xpath,结果公司的源码里面用的是beautifulSoup,因此今天拿来学习一下

安装

pip install beautifulsoup4

使用方法

  • 主要分为三种方法

    1. 节点选择器
    2. 方法选择器
    3. CSS选择器
  • 使用建议:

    ​ 优先使用方法选择器、其次是CSS选择器,最后是节点选择器

样例

from bs4 import BeautifulSoup

text = '''
<html><head><title>there is money</title></head>
<body>
<p class="title" name="dmr"><b>there is money</b></p>
<p class="money">good good study, day day up
<a href="https://www.baidu.com/1" class="error" id="l1"><span><!-- 1 --></span></a>,
<a href="https://www.baidu.com/2" class="error" id="l2"><span>2</span></a> and 
<a href="https://www.baidu.com/3" class="error" id="l3">3</a>;
66666666666
</p>
<p class='body'>...</p>
'''

# 实例化soup对象
soup = BeautifulSoup(text, 'lxml')

# 节点选择器
print(soup.title, type(soup.title))
# 提取节点里面的文本内容
print(soup.title.string)
# 提取p标签的属性
print(soup.p.attrs)
# 获取p标签的class的属性值, 一个class可能会有多种属性,因此class属性被封装成列表
print(soup.p.attrs.get('class'))



# 嵌套
# 下面的例子为:获取第二个p标签下的子节点
# 思路:先找到所有的p标签,找到指定的p标签,.children找出其对应的子节点
print(list(soup.find_all('p')[1].children))
# 寻找一个节点的父节点
print(soup.a.parent)

print(soup.a.parents)  # 返回一个迭代器,建议使用
for i in soup.a.parents:
    print(i)

# 寻找兄弟节点
print(soup.a.next_siblings)  # 返回迭代器,里面是与a标签关联的兄弟节点,但是如果有字符串的话,也会被认为是兄弟节点
for i in soup.a.next_siblings:
    print(i, type(i))

print(soup.a.previous_sibling)  # 注意属性结尾没有s,只返回一个结果。就是a标签的上一个兄弟节点
print(soup.a.previous_siblings, type(soup.a.previous_siblings))
for i in soup.a.previous_siblings:
    print(i)
# 方法选择器
# find_all方法,查询所有符合条件的,返回一个列表,元素类型为tag
# find方法,查询符合条件的第一个元素,返回一个tag类型对象
# 同理,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

print(soup.find_all("a", attrs={"id": "l2"}))  # 如果使用这种方法去找标签,可以通过attrs这个参数指定想找标签的属性
# CSS选择器  关键字:select
print(soup.select("p a"))  # 标签选择器
print(soup.select(".error"))  # 类选择器
print(soup.select("a")[2].get_text())
原文地址:https://www.cnblogs.com/zcg921001/p/13518578.html