Имам прост html файл като този. Всъщност аз го извадих от wiki страница, премахнах някои html атрибути и се превърнах в тази проста html страница.
<html>
<body>
<h1>draw electronics schematics</h1>
<h2>first header</h2>
<p>
<!-- ..some text images -->
</p>
<h3>some header</h3>
<p>
<!-- ..some image -->
</p>
<p>
<!-- ..some text -->
</p>
<h2>second header</h2>
<p>
<!-- ..again some text and images -->
</p>
</body>
</html>
Четох този html файл с питон и красива супа по този начин.
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("test.html"))
pages = []
Това, което бих искал да направя, е да разделим тази html страницадве части. Първата част ще бъде между първата и втората глава. А втората част ще бъде между вторите тагове <h2> и </body>. Тогава бих искал да ги съхранявам в списък например страници. Така че аз ще мога да създам няколко страници от html страница според <h2> таговете.
Някакви идеи за това как трябва да направя това? Благодаря..
Отговори:
3 за отговор № 1Потърсете h2
след това използвайте .next_sibling
да вземеш всичко, докато не стане друго h2
етикет:
soup = BeautifulSoup(open("test.html"))
pages = []
h2tags = soup.find_all("h2")
def next_element(elem):
while elem is not None:
# Find next element, skip NavigableString objects
elem = elem.next_sibling
if hasattr(elem, "name"):
return elem
for h2tag in h2tags:
page = [str(h2tag)]
elem = next_element(h2tag)
while elem and elem.name != "h2":
page.append(str(elem))
elem = next_element(elem)
pages.append("n".join(page))
С помощта на извадката това дава:
>>> pages
["<h2>first header</h2>n<p>n<!-- ..some text images -->n</p>n<h3>some header</h3>n<p>n<!-- ..some image -->n</p>n<p>n<!-- ..some text -->n</p>", "<h2>second header</h2>n<p>n<!-- ..again some text and images -->n</p>"]
>>> print pages[0]
<h2>first header</h2>
<p>
<!-- ..some text images -->
</p>
<h3>some header</h3>
<p>
<!-- ..some image -->
</p>
<p>
<!-- ..some text -->
</p>