Last active
January 27, 2024 06:48
-
-
Save revotu/21d52bd20a073546983985ba3bf55deb to your computer and use it in GitHub Desktop.
remove all HTML attributes with BeautifulSoup except some tags(<a> <img>...)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from bs4 import BeautifulSoup | |
# remove all attributes | |
def _remove_all_attrs(soup): | |
for tag in soup.find_all(True): | |
tag.attrs = {} | |
return soup | |
# remove all attributes except some tags | |
def _remove_all_attrs_except(soup): | |
whitelist = ['a','img'] | |
for tag in soup.find_all(True): | |
if tag.name not in whitelist: | |
tag.attrs = {} | |
return soup | |
# remove all attributes except some tags(only saving ['href','src'] attr) | |
def _remove_all_attrs_except_saving(soup): | |
whitelist = ['a','img'] | |
for tag in soup.find_all(True): | |
if tag.name not in whitelist: | |
tag.attrs = {} | |
else: | |
attrs = dict(tag.attrs) | |
for attr in attrs: | |
if attr not in ['src','href']: | |
del tag.attrs[attr] | |
return soup |
Instead of removing HTML tags for the whole soup
, how is this done for a specific BS4 tag?
Example:
- I have the
soup
:feed = BeautifulSoup(response, 'xml')
- I parse a specific tag using
item = feed.select_one('item')
- If the resulting
item
contains<a>
,<p>
, and<img>
tags that I want to remove, how is this accomplished?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
is working with nested tags? because in my test soup.find_all(True) will return only parents elements.