Skip to content
Artwork for CyberCode Academy
CyberCode Academy Β· July 29 Β· 22 min

Course 40 - Web Scraping with Python | Episode 19: Tree Navigation, Advanced Filtering, and Link Extraction

In this lesson, you’ll learn about: advanced Beautiful Soup navigation, powerful filtering techniques, and how to extract and normalize real-world data like links from complex websites1. Advanced Tree NavigationπŸ”Ή Multi-Directional MovementBeautiful Soup allows you to move through HTML in three different dimensions:πŸ”Ή Vertical Navigationlist(tag.children) list(tag.descendants) tag.parent tag.parents .children β†’ direct children only .descendants β†’ all nested elements .parent / .parents β†’ move upward πŸ‘‰ Key Insight .children is shallow β€” .descendants is deep traversalπŸ”Ή Sideways Navigation (Siblings)tag.next_sibling tag.previous_sibling Moves across elements at the same level πŸ”Ή Chronological Navigation (Parser Order)tag.next_element tag.previous_element Follows actual parsing sequence Can move into text, nested tags, or out of structure πŸ‘‰ Key Insight next_element β‰  next_sibling It follows document order, not hierarchy2. Advanced Filtering TechniquesπŸ”Ή Precision Data Targeting3. Filtering with Regular Expressionsimport re soup.find_all(re.compile("^p")) Matches tags starting with "p" Useful for pattern-based selection 4. Filtering with Attributessoup.find_all("a", class_="nav") soup.find_all("div", id="main") soup.find_all("img", src=True) class_ β†’ avoids Python keyword conflict src=True β†’ finds elements that have the attribute πŸ‘‰ Key Insight You can filter by value OR existence of attributes5. Custom Function Filters (Power Feature)def has_src_no_href(tag): return tag.has_attr("src") and not tag.has_attr("href") soup.find_all(has_src_no_href) πŸ‘‰ Key Insight Custom functions = unlimited filtering logic6. Real-World Example: Link ExtractionπŸ”Ή Extracting Links from a PageπŸ”Ή Extract All Linkslinks = soup.find_all("a") for link in links: print(link.get("href")) 7. Relative vs Absolute URLsTypeExampleRelative/aboutAbsolutehttps://site.com/aboutπŸ”Ή Convert to Absolutebase = "https://example.com" full_url = base + relative_url πŸ‘‰ Key Insight Most websites use relative links β†’ you must normalize them8. Extracting All Resource Links# Anchor links soup.find_all("a") # Stylesheets / metadata soup.find_all("link") # Images soup.find_all("img") πŸ‘‰ Key Insight Data isn’t only in tags β€” it's everywhere9. Mental ModelThink of advanced scraping as: 🧭 Navigation β†’ move through tree 🎯 Filtering β†’ select exactly what you want πŸ”— Extraction β†’ collect and normalize data Final TakeawayAt this level, Beautiful Soup becomes more than a parserβ€”it becomes a data navigation engine.Once you master: Deep traversal (descendants, parents) Smart filtering (regex + functions) Real-world normalization (links, resources) πŸ‘‰ You can extract any structured data from any HTML document, no matter how complex. You can listen and download our episodes for free on more than 10 different platforms: https://linktr.ee/cybercode_academy

0:00-22:37

transcript

No transcript β€” this publisher did not publish one.

show notes

In this lesson, you’ll learn about: advanced Beautiful Soup navigation, powerful filtering techniques, and how to extract and normalize real-world data like links from complex websites1. Advanced Tree NavigationπŸ”Ή Multi-Directional MovementBeautiful Soup allows you to move through HTML in three different dimensions:πŸ”Ή Vertical Navigationlist(tag.children) list(tag.descendants) tag.parent tag.parents
  • .children β†’ direct children only
  • .descendants β†’ all nested elements
  • .parent / .parents β†’ move upward
πŸ‘‰ Key Insight
.children is shallow β€” .descendants is deep traversalπŸ”Ή Sideways Navigation (Siblings)tag.next_sibling tag.previous_sibling
  • Moves across elements at the same level
πŸ”Ή Chronological Navigation (Parser Order)tag.next_element tag.previous_element
  • Follows actual parsing sequence
  • Can move into text, nested tags, or out of structure
πŸ‘‰ Key Insight
next_element β‰  next_sibling
It follows document order, not hierarchy2. Advanced Filtering TechniquesπŸ”Ή Precision Data Targeting3. Filtering with Regular Expressionsimport re soup.find_all(re.compile("^p"))
  • Matches tags starting with "p"
  • Useful for pattern-based selection
4. Filtering with Attributessoup.find_all("a", class_="nav") soup.find_all("div", id="main") soup.find_all("img", src=True)
  • class_ β†’ avoids Python keyword conflict
  • src=True β†’ finds elements that have the attribute
πŸ‘‰ Key Insight
You can filter by value OR existence of attributes5. Custom Function Filters (Power Feature)def has_src_no_href(tag): return tag.has_attr("src") and not tag.has_attr("href") soup.find_all(has_src_no_href) πŸ‘‰ Key Insight
Custom functions = unlimited filtering logic6. Real-World Example: Link ExtractionπŸ”Ή Extracting Links from a PageπŸ”Ή Extract All Linkslinks = soup.find_all("a") for link in links: print(link.get("href")) 7. Relative vs Absolute URLsTypeExampleRelative/aboutAbsolutehttps://site.com/aboutπŸ”Ή Convert to Absolutebase = "https://example.com" full_url = base + relative_url πŸ‘‰ Key Insight
Most websites use relative links β†’ you must normalize them8. Extracting All Resource Links# Anchor links soup.find_all("a") # Stylesheets / metadata soup.find_all("link") # Images soup.find_all("img") πŸ‘‰ Key Insight
Data isn’t only in tags β€” it's everywhere9. Mental ModelThink of advanced scraping as:
  • 🧭 Navigation β†’ move through tree
  • 🎯 Filtering β†’ select exactly what you want
  • πŸ”— Extraction β†’ collect and normalize data
Final TakeawayAt this level, Beautiful Soup becomes more than a parserβ€”it becomes a data navigation engine.Once you master:
  • Deep traversal (descendants, parents)
  • Smart filtering (regex + functions)
  • Real-world normalization (links, resources)
πŸ‘‰ You can extract any structured data from any HTML document, no matter how complex.

You can listen and download our episodes for free on more than 10 different platforms:
https://linktr.ee/cybercode_academy
links1