find_all перехватывает мои нужные теги, но find_all_previous (и кажется, что так и должно быть) - PullRequest
0 голосов
/ 06 июня 2019

Я использую 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">&nbsp;</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">&nbsp;</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">&nbsp;</td></tr>
<tr><td colspan="3" class="reportstableheader">
<span>
Purchase Date: 01/01/1900&nbsp;&nbsp;-&nbsp;&nbsp; Sold Date: 01/01/1900</span>
</td></tr>
<tr class="property ">
    Info for past property 2
</tr>
<tr><td colspan="3">&nbsp;</td></tr>
<tr><td colspan="3" class="reportstableheader">
<span>
Purchase Date: N/A&nbsp;&nbsp;-&nbsp;&nbsp; Sold Date: 03/30/2007</span>
</td></tr>
<tr class="property shaded">
    Info for past property 3
</tr>
<tr><td colspan="3">&nbsp;</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. Чего мне не хватает?

1 Ответ

0 голосов
/ 06 июня 2019

ОК, я идиот.Он возвращал правильные теги все время, я просто не понимал, что они будут отображаться задом наперед, и мне не удалось найти тег свойства 1 в беспорядке исходного неотредактированного HTML.Извините и спасибо, вы все!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...