使用 Beautiful Soup

使用 Beautiful Soup

参考资料:https://cuiqingcai.com/5548.html

# 导入Beautiful模块
from bs4 import BeautifulSoup
# 初始化
soup = BeautifulSoup(html,'lxml')

soup = BeautifulSoup(html,'lxml)完成了初始化。如果该html不是完整的html代码(指没有html和body节点),初始化过程可以自动更正格式,将html,body部分补上。

第一个参数html是要解析的html代码。第二个参数是选取的解析器,这里最好选lxml

soup.prettify():可以把要解析的字符串以标准的缩进格式输出。

soup.a:a节点开始到闭合处的所有代码

soup.a.contents:以列表形式储存的a节点开始到闭合处的所有内容

利用例子说明

html文本

html = """
<html>
    <head>
        <title>The Dormouse's story</title>
    </head>
    <body>
        <p class="story">
            Once upon a time there were three little sisters; and their names were
            <a href="http://example.com/elsie" class="sister" id="link1">
                <span>Elsie</span>
            </a>
            <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> 
            and
            <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
            and they lived at the bottom of a well.
        </p>
        <p class="story">...</p>
"""

print(soup.p)print(soup.p.contents)的输出分别为:

image-20210205230408562

image-20210205230525012
请仔细对比观察差异。

soup.a.name:获取a节点的名称

soup.a.attrs:以列表形式获取a节点下的所有属性

soup.a.attrs[b]:获取a节点下b属性对应的值

soup.a.string:获取a节点的内容

从外到内多级选取节点

soup.a.b.c.d:获取a节点的b节点的c节点的d节点开始到闭合处的所有代码

子节点与子孙节点

soup.a.children:获取a的直接子节点

children属性返回的是一个 列表迭代器 对象,因此可迭代

soup.a.descendants:获取a的子孙节点

descendants属性返回的是一个 生成器 对象,也可迭代

关于生成器迭代器

父节点与祖父节点

soup.a.parent:获取a节点的父节点

soup.a.parents:获取a节点的祖先节点

注意的是soup.a.parents的类型是生成器,因此如果我们想看到内容,应用list()方法将其转化成列表

print(list(soup.a.parents))

兄弟节点(同级节点)

soup.a.next_sibling:获取a的下一个同级节点

soup.a.previous_sibling:获取a的上一个同级节点

以上返回一个元素

soup.a.next_siblings:获取a接下来的所有同级节点

soup.a.previous_siblings:获取a之前的所有同级节点

以上返回生成器

方法选择器

find_all()

api如右:find_all(name , attrs , recursive , text , **kwargs)

通过节点名来查询元素

soup.find_all(name='ul'):找到名称为ul的节点,以列表形式返回

通过属性来查询元素

soup.find_all(attrs={'id': 'list-1'}):找到id为list-1的节点,以列表形式返回

由于属性是字典类型,所以参数传的时候也要按键值对来传

通过文本来查询元素

soup.find_all(text=re.compile('link')):找到文本里有link的节点,以列表形式返回

由于要用到re里的compile方法,所以此项用前要import re

find()

find_all()用法一样,不过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_previous_sibling()`**:前者返回前面所有的兄弟节点,后者返回前面第一个兄弟节点。
  • find_all_next()find_next():前者返回节点后所有符合条件的节点,后者返回第一个符合条件的节点。
  • find_all_previous()find_previous():前者返回节点后所有符合条件的节点,后者返回第一个符合条件的节点。
好的,我可以为你解答这个问题。Beautiful Soup 是一个 Python 的第三方库,主要用于解析 HTML 和 XML 的文档。使用 Beautiful Soup 可以轻松地获取网页中的各种信息,例如标签、属性、文本等等。 下面是使用 Beautiful Soup 解析网页的基本步骤: 1. 安装 Beautiful Soup 库。可以使用 pip 工具来安装,命令如下: ``` pip install beautifulsoup4 ``` 2. 导入 Beautiful Soup 库。在 Python 代码中,可以使用以下语句导入 Beautiful Soup 库: ```python from bs4 import BeautifulSoup ``` 3. 获取网页内容。可以使用 Python 的 requests 库来获取网页内容,例如: ```python import requests url = 'https://www.example.com' response = requests.get(url) html = response.text ``` 4. 使用 Beautiful Soup 解析网页。可以使用以下语句来创建一个 Beautiful Soup 对象,并解析网页内容: ```python soup = BeautifulSoup(html, 'html.parser') ``` 其中,第一个参数是网页内容,第二个参数是解析器类型,这里使用的是 Python 的内置解析器。 5. 提取网页中的信息。使用 Beautiful Soup 提供的各种方法,可以轻松地提取网页中的各种信息,例如标签、属性、文本等等。例如: ```python # 获取网页中的标题 title = soup.title.string # 获取所有的链接 links = soup.find_all('a') # 获取第一个 div 标签的 class 属性值 div_class = soup.find('div')['class'] ``` 这就是使用 Beautiful Soup 解析网页的基本步骤。当然,在实际应用中,还需要根据具体的需求来选择相应的方法和参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值