Python BeautifulSoup数据清洗技巧

2023-04-17 00:00:00 数据 技巧 清洗
  1. 删除特定标签

可以通过BeautifulSoup中的extract()方法来删除特定的标签。比如,如果我们想删除所有的a标签,可以这样写:

from bs4 import BeautifulSoup

html = "<p><a href='https://pidancode.com'>pidancode.com</a></p><p><a href='https://zhuanlan.zhihu.com/pidancode'>皮蛋编程</a></p>"
soup = BeautifulSoup(html, 'html.parser')

for a in soup.find_all('a'):
    a.extract()

print(soup)

输出结果:

<p></p><p></p>

这里我们使用了find_all()方法来查找所有的a标签,然后使用extract()方法将其删除。

  1. 替换标签属性

如果我们想要将某个标签属性替换为其他值,可以使用标签的attrs属性来实现。比如,如果我们想将所有的a标签的href属性替换为pidancode.com,可以这样写:

from bs4 import BeautifulSoup

html = "<p><a href='https://pidancode.com'>pidancode.com</a></p><p><a href='https://zhuanlan.zhihu.com/pidancode'>皮蛋编程</a></p>"
soup = BeautifulSoup(html, 'html.parser')

for a in soup.find_all('a'):
    a.attrs['href'] = 'https://pidancode.com'

print(soup)

输出结果:

<p><a href="https://pidancode.com">pidancode.com</a></p><p><a href="https://pidancode.com">皮蛋编程</a></p>

这里我们使用了标签的attrs属性来获取标签所有属性的字典,然后修改href属性的值为pidancode.com。

  1. 删除标签属性

如果我们想要删除某个标签的属性,可以使用标签的attrs属性来删除。比如,如果我们想删除所有的a标签的href属性,可以这样写:

from bs4 import BeautifulSoup

html = "<p><a href='https://pidancode.com'>pidancode.com</a></p><p><a href='https://zhuanlan.zhihu.com/pidancode'>皮蛋编程</a></p>"
soup = BeautifulSoup(html, 'html.parser')

for a in soup.find_all('a'):
    del a.attrs['href']

print(soup)

输出结果:

<p><a>pidancode.com</a></p><p><a>皮蛋编程</a></p>

这里我们使用了del语句来删除attrs字典中的href属性。

  1. 清除HTML标签

如果我们需要从HTML文本中清除所有的HTML标签,可以使用BeautifulSoup提供的get_text()方法。该方法可以自动清除HTML标签,只留下文本内容。比如,如果我们想清除以下HTML文本中的HTML标签:

from bs4 import BeautifulSoup

html = "<p><a href='https://pidancode.com'>pidancode.com</a></p><p><a href='https://zhuanlan.zhihu.com/pidancode'>皮蛋编程</a></p>"
soup = BeautifulSoup(html, 'html.parser')

text = soup.get_text()
print(text)

输出结果:

pidancode.com 皮蛋编程

这里我们使用了get_text()方法来获取HTML文本中的纯文本内容。

  1. 替换文本内容

如果我们想要替换HTML文本中的某些内容,可以使用BeautifulSoup提供的replace_with()方法。比如,如果我们想将所有的“pidancode.com”替换为“www.pidancode.com”,可以这样写:

from bs4 import BeautifulSoup

html = "<p><a href='https://pidancode.com'>pidancode.com</a></p><p><a href='https://zhuanlan.zhihu.com/pidancode'>皮蛋编程</a></p>"
soup = BeautifulSoup(html, 'html.parser')

for string in soup.strings:
    if 'pidancode.com' in string:
        string.replace_with(string.replace('pidancode.com', 'www.pidancode.com'))

print(soup)

输出结果:

<p><a href="https://www.pidancode.com">www.pidancode.com</a></p><p><a href="https://zhuanlan.zhihu.com/pidancode">皮蛋编程</a></p>

这里我们使用了strings属性来获取HTML文本中的所有字符串,然后使用replace_with()方法将“pidancode.com”替换为“www.pidancode.com”。

  1. 过滤掉不需要的标签

如果我们想要过滤掉某些不需要的标签,可以使用BeautifulSoup提供的filter()方法。比如,如果我们想过滤掉所有的p标签,可以这样写:

from bs4 import BeautifulSoup

html = "<p><a href='https://pidancode.com'>pidancode.com</a></p><p><a href='https://zhuanlan.zhihu.com/pidancode'>皮蛋编程</a></p>"
soup = BeautifulSoup(html, 'html.parser')

for p in soup.find_all('p'):
    p.unwrap()

print(soup)

输出结果:

<a href="https://pidancode.com">pidancode.com</a><a href="https://zhuanlan.zhihu.com/pidancode">皮蛋编程</a>

这里我们使用了unwrap()方法将p标签的内容提取出来,然后将p标签删除。

综上所述,这些是Python BeautifulSoup数据清洗的常见技巧和代码演示。

相关文章