Python BeautifulSoup网页自动化处理技巧

2023-04-17 00:00:00 网页 自动化 技巧
  1. 解析HTML/XML文档

使用BeautifulSoup库的核心功能是可以解析HTML/XML文档,将其转换成Python可以操作的对象,方便对文档中的内容进行处理。解析文档可以使用BeautifulSoup类的构造方法,如下所示:

from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>pidancode.com</title>
</head>
<body>
    <div class="container">
        <h1>皮蛋编程</h1>
        <p>欢迎来到皮蛋编程的世界!</p>
        <ul class="list">
            <li><a href="http://www.baidu.com">百度搜索</a></li>
            <li><a href="http://www.google.com">谷歌搜索</a></li>
            <li><a href="http://www.bing.com">必应搜索</a></li>
        </ul>
    </div>
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
  1. 获取标签元素

使用BeautifulSoup库可以很方便地获取标签元素及其属性值,常用的方法包括:find()、find_all()、select()。其中,find()方法用于获取第一个符合条件的标签元素,find_all()方法用于获取所有符合条件的标签元素,select()方法用于利用CSS选择器获取标签元素。

下面给出几个使用示例:

# 获取第一个ul元素
ul = soup.find('ul')

# 获取所有a标签元素
a_list = soup.find_all('a')

# 获取ul标签元素下的所有li元素
li_list = ul.find_all('li')

# 获取class为list的ul元素
ul_list = soup.select('ul.list')
  1. 获取元素的属性值

BeautifulSoup库可以很方便地获取标签元素的属性值,使用方法类似于字典取值方式,下面给出一个示例:

# 获取第一个a标签元素的href属性值
a_href = a_list[0]['href']

# 获取class为list的ul元素的class属性值
ul_class = ul_list[0]['class']
  1. 操作元素的内容

使用BeautifulSoup库可以对标签元素的内容进行操作,常用的方法包括:get_text()、string、replace_with()。

其中,get_text()方法可以获取标签元素的文本内容(去除HTML标签),string属性可以获取标签元素的文本内容(不去除HTML标签),replace_with()方法可以替换标签元素的内容。

# 获取第一个p标签元素的文本内容
p_text = soup.find('p').get_text()

# 获取第一个h1标签元素的文本内容
h1_text = soup.find('h1').string

# 将第一个p标签元素替换成新的标签元素
new_p = soup.new_tag('p')
new_p.string = '皮蛋编程欢迎你!'
soup.find('p').replace_with(new_p)
  1. 修改元素的属性值

使用BeautifulSoup库也可以修改标签元素的属性值,常用的方法包括:replace_with()、set()。

其中,replace_with()方法可以替换标签元素,set()方法可以设置标签元素的属性值。

# 将第一个a标签元素的href属性值修改为pidancode.com
soup.find('a')['href'] = 'http://www.pidancode.com'

# 将第一个p标签元素替换成新的标签元素
new_p = soup.new_tag('p')
new_p.string = '皮蛋编程欢迎你!'
soup.find('p').replace_with(new_p)
  1. 新增元素

使用BeautifulSoup库可以新增标签元素,常用的方法包括:new_tag()、new_string()、insert()。

其中,new_tag()方法可以新建标签元素,new_string()方法可以新建文本节点,insert()方法可以插入标签元素和文本节点。

# 新建一个新的a标签元素
new_a = soup.new_tag('a')
new_a['href'] = 'http://www.pidancode.com'
new_a.string = '皮蛋编程'

# 在body标签元素内,新增一个新的a标签元素
soup.body.insert(0, new_a)

# 在第一个a标签元素前,新增一个新的span标签元素
new_span = soup.new_tag('span')
new_span.string = ',编程从此不再孤单!'
soup.find_all('a')[0].insert_before(new_span)

# 新增一个新的文本节点
new_text = soup.new_string('last modified: 2021.10.10')
soup.body.append(new_text)
  1. 删除元素

使用BeautifulSoup库也可以删除标签元素,常用的方法包括:decompose()、extract()。

其中,decompose()方法可以将标签元素从文档中删除,extract()方法可以将标签元素从文档中移除,但可以保存在内存中。

# 删除class为container的div标签元素
soup.find('div', {'class': 'container'}).decompose()

# 移除第一个a标签元素
removed_a = soup.find('a').extract()

相关文章