AI SummaryA Python skill booster for BeautifulSoup4 that enables parsing, searching, and modifying HTML/XML documents through a navigable tag tree. Developers working with web scraping, data extraction, and HTML manipulation benefit from this practical library integration.
Install
Copy this and paste it into Claude Code, Cursor, or any AI assistant:
I want to install the "beautifulsoup4" skill in my project. Please run this command in my terminal: # Install skill into the correct directory (39 files) mkdir -p .claude/skills/skills && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/beautifulsoup4-SKILL.md" && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/README.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/README.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/chi-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/chi-SKILL.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/cobra-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/cobra-SKILL.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/echo-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/echo-SKILL.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/fiber-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/fiber-SKILL.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/gin-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/gin-SKILL.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/logrus-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/logrus-SKILL.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/testify-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/testify-SKILL.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/viper-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/viper-SKILL.md" && mkdir -p .claude/skills/skills/go && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/go/zap-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/go/zap-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/aiohttp-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/aiohttp-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/arrow-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/arrow-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/beautifulsoup4-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/beautifulsoup4-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/boto3-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/boto3-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/celery-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/celery-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/click-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/click-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/cryptography-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/cryptography-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/django-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/django-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/fastapi-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/fastapi-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/flask-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/flask-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/httpx-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/httpx-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/jinja2-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/jinja2-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/keras-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/keras-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/matplotlib-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/matplotlib-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/numpy-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/numpy-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/pandas-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/pandas-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/pillow-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/pillow-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/pydantic-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/pydantic-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/pytest-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/pytest-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/pytorch-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/pytorch-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/requests-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/requests-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/rich-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/rich-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/scikit-learn-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/scikit-learn-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/scipy-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/scipy-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/sqlalchemy-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/sqlalchemy-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/transformers-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/transformers-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/typer-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/typer-SKILL.md" && mkdir -p .claude/skills/skills/python && curl --retry 3 --retry-delay 2 --retry-all-errors -o .claude/skills/skills/python/unstructured-SKILL.md "https://raw.githubusercontent.com/SkillDoAI/skilldo/main/examples/skills/python/unstructured-SKILL.md" Then restart Claude Code (or reload the window in Cursor) so the skill is picked up.
Description
Parse, search, and modify HTML/XML documents by building a navigable tree of tags and text.
Imports
`python import bs4 from bs4 import BeautifulSoup, Tag, Comment from bs4.exceptions import FeatureNotFound, ParserRejectedMarkup from bs4.dammit import UnicodeDammit `
Parse markup with an explicit parser ✅ Current
`python from __future__ import annotations from bs4 import BeautifulSoup html_doc = "<html><body><p class='body strikeout'>Hello</p></body></html>"
Always choose the parser explicitly for consistent behavior across environments.
soup = BeautifulSoup(html_doc, "html.parser") p = soup.find("p") assert p is not None print(p.name) # "p" print(p.get_text()) # "Hello" ` • Prefer BeautifulSoup(markup, "html.parser"), "lxml", "html5lib", or "xml"/"lxml-xml" depending on your needs; different parsers can produce different trees for invalid documents.
Parse from a file handle (context manager) ✅ Current
`python from __future__ import annotations from pathlib import Path from bs4 import BeautifulSoup path = Path("example.html") path.write_text("<html><body><a href='/x'>Link</a></body></html>", encoding="utf-8") with path.open("r", encoding="utf-8") as fp: soup = BeautifulSoup(fp, "html.parser") a = soup.find("a") assert a is not None print(a.get("href")) # "/x" ` • Pass an open file handle directly to BeautifulSoup to let the builder stream/handle encodings appropriately.
Discussion
Health Signals
My Fox Den
Community Rating
Sign in to rate this booster