@sazhyk

Как распарсить html-файл на несколько файлов?

Помогите разобраться с парсингом статичной html'ки.
Есть файлик, довольно необычный, и, с точки зрения стандартов, с кучей нарушений. Но не об этом сейчас.
Собственно файлик
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict/EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Parse Me</title>
    </head>
    <body>
        <div id="my_id">
            <!-- Something -->
        </div>
        <div id="my_id">
            <!-- Something -->
        </div>
        <!-- Много <div id="my_id">  -->
        <div id="my_id">
            <!-- Something -->
        </div>
    </body>
</html>

Необходимо из этого файла достать все
<div id="my_id">
    <!-- Something -->
</div>
и уже из них создать новые отдельные файлы html.
Вроде таких
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict/EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Parse Me</title>
    </head>
    <body>
        <div id="my_id">
            <!-- Something -->
        </div>
    </body>
</html>

Ранее с парсингом никогда не сталкивался. Покурил гугла, пошукал на тостере... Пишут вроде LXML неплох в этом деле. Но его документация как-то не очень мне понятна. Помогите хоть советом, хоть делом - всему буду рад.
  • Вопрос задан
  • 397 просмотров
Решения вопроса 1
qlkvg
@qlkvg
python backend developer
Вообще bs4 тут считается зашкваром, но я его все равно люблю.

spoiler
from bs4 import BeautifulSoup

src = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict/EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Parse Me</title>
    </head>
    <body>
        <div id="my_id">
            <!-- Something -->
        </div>
        <div id="my_id">
            <!-- Something -->
        </div>
        <!-- Много <div id="my_id">  -->
        <div id="my_id">
            <!-- Something -->
        </div>
    </body>
</html>
"""

template = """
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict/EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Parse Me</title>
    </head>
    <body>
        {}
    </body>
</html>
"""

bs = BeautifulSoup(src)
divs = bs.find_all("div", {"id": "my_id"})
for div in divs:
	print(template.format(div))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы