Я использую BeautifulSoup для разбора HTML-документа. find_all_previous()
, кажется, только находит ближайший предыдущий предмет (или, по крайней мере, он только ловит предмет № 2 из 2 предметов, которые он должен поймать). Я неправильно понимаю его использование или в моем коде есть ошибка?
HTML-код, который я пытаюсь проанализировать, содержит информацию о шести свойствах, каждое из которых содержит теги <tr class="property shaded">
или <tr class="property">
. Два текущих и четыре предыдущих свойства; два набора разделены тегом <h2 id="past-property-deeds">
. Я только хочу собрать информацию о текущих свойствах. Кажется, что идентификация тега заголовка «Прошлые свойства» и использование find_all_previous()
на нем должны получить желаемые результаты (информация о свойствах 1 и 2), но он только перехватывает второе свойство, а не первое.
html_doc = """
<tr>
<td colspan="3" valign="top">
<h2 id="current-property-deeds">Current Property Deeds (2 Found)</h2>
</td>
</tr>
<tr><td colspan="3" class="reportstableheader">
<span>
Purchase Date: N/A</span>
</td></tr>
<tr class="property shaded">
Info for current property 1
</tr>
<tr><td colspan="3"> </td></tr>
<tr><td colspan="3" class="reportstableheader">
<span>
Purchase Date: N/A</span>
</td></tr>
<tr class="property ">
Info for current property 2
</tr>
<tr><td colspan="3"> </td></tr>
<tr>
<td colspan="3" valign="top">
<h2 id="past-property-deeds">Past Property Deeds (4 Found)</h2>
</td>
</tr>
<tr><td colspan="3" class="reportstableheader">
<span>
Purchase Date: 01/01/1900</span>
</td></tr>
<tr class="property shaded">
Info for past property 1
</tr>
<tr><td colspan="3"> </td></tr>
<tr><td colspan="3" class="reportstableheader">
<span>
Purchase Date: 01/01/1900 - Sold Date: 01/01/1900</span>
</td></tr>
<tr class="property ">
Info for past property 2
</tr>
<tr><td colspan="3"> </td></tr>
<tr><td colspan="3" class="reportstableheader">
<span>
Purchase Date: N/A - Sold Date: 03/30/2007</span>
</td></tr>
<tr class="property shaded">
Info for past property 3
</tr>
<tr><td colspan="3"> </td></tr>
<tr><td colspan="3" class="reportstableheader">
<span>
Purchase Date: 09/22/2000</span>
</td></tr>
<tr class="property ">
Info for past property 4
</tr>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
past_property_header = soup.find("h2", id="past-property-deeds")
all_property_info = soup.find_all("tr", class_=re.compile("^property"))
current_property_only = past_property_header.find_all_previous("tr", class_=re.compile("^property"))
all_property_info
находит все теги, как и ожидалось. Однако current_property_only
находит только тег, окружающий свойство 2, когда я думаю, что он должен перехватывать и 1, и 2. Чего мне не хватает?