То, что должно быть довольно простым извлечением регулярных выражений, смущает меня. Не смог найти похожий вопрос по SO, поэтому рад, что на него указывают, если он существует. Учитывая следующий HTML:
<h1 class="title">Title One</h1><p><a href="#">40.5</a><a href="#">31.3</a></p>
<h1 class="title alternate">Title Two</h1><p><a href="#">12.1</a><a href="#">82.0</a></p>
(среди больших документов - выдержки, скорее всего, будут состоять из нескольких строк)
Как я могу построить регулярное выражение, которое находит текст в тегах A, в первом P после H1? Регулярное выражение будет проходить в цикле, так что я могу передать его в заголовок, чтобы получить следующие элементы.
<a[^>]*>([0-9.]+?)</a>
очевидно соответствует всем элементам в теге (и должно быть в порядке, поскольку теги не могут быть связаны), но я не могу связать их с H1.
.+Title One.+<a[^>]*>([0-9.]+?)</a></p>
не удается.
Я пытался использовать взгляд сзади так:
(?<=Title One.+)<a[^>]*>([0-9.]+?)</a></p>
и некоторые варианты, но это разрешено только для совпадений фиксированной ширины (что не будет здесь).
Для контекста это будет использовать движок регулярных выражений Python. Я знаю, что регулярные выражения не обязательно являются лучшим решением для этого, поэтому альтернативные предложения, использующие DOM или что-то еще, также с благодарностью получены:)
Обновление
Чтобы пояснить вышесказанное, я хотел бы получить следующее:
{"Title One": ["40.5", "31.3"], "Title Two": ["12.1", "82.0"]}
(не то, что мне нужна помощь в составлении словаря, но он демонстрирует, как мне нужно, чтобы значения были связаны с заголовком).
Пока что BeautifulSoup выглядит как лучший снимок. LXML также, вероятно, будет работать, поскольку исходный HTML на самом деле не является супом-тегом - он довольно хорошо структурирован, по крайней мере в тех местах, которые меня интересуют.