MCPcopy Create free account
hub / github.com/SpaceZephyr/myskill / HTMLToMarkdown

Class HTMLToMarkdown

web-scraper/scripts/fetch_url.py:24–152  ·  view source on GitHub ↗

Convert HTML to simplified markdown.

Source from the content-addressed store, hash-verified

22
23
24class HTMLToMarkdown(HTMLParser):
25 """Convert HTML to simplified markdown."""
26
27 def __init__(self):
28 super().__init__()
29 self.result = []
30 self.current_tag = None
31 self.in_script = False
32 self.in_style = False
33 self.in_nav = False
34 self.in_footer = False
35 self.in_aside = False
36 self.list_depth = 0
37 self.ordered_list_counter = 0
38 self.ignore_tags = {'script', 'style', 'nav', 'footer', 'aside', 'noscript', 'iframe', 'svg', 'path', 'button', 'form', 'input'}
39 self.block_tags = {'p', 'div', 'article', 'section', 'main', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'blockquote', 'pre', 'br', 'tr'}
40
41 def handle_starttag(self, tag, attrs):
42 self.current_tag = tag
43
44 if tag in self.ignore_tags:
45 if tag == 'script':
46 self.in_script = True
47 elif tag == 'style':
48 self.in_style = True
49 elif tag == 'nav':
50 self.in_nav = True
51 elif tag == 'footer':
52 self.in_footer = True
53 elif tag == 'aside':
54 self.in_aside = True
55 return
56
57 if self.in_script or self.in_style or self.in_nav or self.in_footer or self.in_aside:
58 return
59
60 if tag in ('h1', 'h2', 'h3', 'h4', 'h5', 'h6'):
61 level = int(tag[1])
62 self.result.append('\n\n' + '#' * level + ' ')
63 elif tag == 'p':
64 self.result.append('\n\n')
65 elif tag == 'br':
66 self.result.append('\n')
67 elif tag == 'li':
68 if self.ordered_list_counter:
69 self.result.append(f'\n{self.ordered_list_counter}. ')
70 self.ordered_list_counter += 1
71 else:
72 self.result.append('\n- ')
73 elif tag == 'ul':
74 self.list_depth += 1
75 self.ordered_list_counter = 0
76 elif tag == 'ol':
77 self.list_depth += 1
78 self.ordered_list_counter = 1
79 elif tag == 'blockquote':
80 self.result.append('\n\n> ')
81 elif tag == 'pre':

Callers 1

fetch_urlFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected