Возможно, вам будет легче, если вы отформатируете свой код более тщательно.Я очистил его и добавил несколько недопустимых примеров в HTML, чтобы проверить, действительно ли работает фильтр даты.Некоторые из значений, очевидно, должны быть установлены динамически, а не вручную, но это должно приблизить вас к цели.с даты и времени импорта дата и время
from bs4 import BeautifulSoup
DATE_FORMAT = "%Y-%m-%d"
html = """
<tr id="RAOCSTD-dates" class="availability selected">
<td title="3" class="dt20181025 d6">
<span id="RAOCSTD2018-10-25">$839</span>
</td>
<td title="3" class="dt20181027 d6">
<span id="RAOCSTD2018-10-27">$739</span>
</td>
<td title="3" class="dt20181028 d0">
<span id="RAOCSTD2018-10-28">$686</span>
</td>
<td title="3" class="dt20181029 d1">
<span id="RAOCSTD2018-10-29">$686</span>
</td>
<td title="3" class="dt20181030 d2">
<span id="RAOCSTD2018-10-30">$686</span>
</td>
<td title="3" class="dt20181101 d2">
<span id="RAOCSTD2018-11-01">$686</span>
</td>
<td title="3" class="dt20181102 d2">
<span id="RAOCSTD2018-11-02">$686</span>
</td>
</tr>
"""
room_instance = "RAOCSTD"
start_date = datetime.strptime("2018-10-27", DATE_FORMAT)
end_date = datetime.strptime("2018-10-30", DATE_FORMAT)
soup = BeautifulSoup(html, "html.parser")
values = []
def id_filter(i):
if not (i and i.startswith(room_instance)):
return False
id_date = datetime.strptime(i.split(room_instance)[-1], DATE_FORMAT)
return start_date <= id_date <= end_date
for tr in soup.find_all("tr", {"class":"availability selected"}):
values.extend(
span.text for span in
tr.findAll(
"span",
id=id_filter,
)
)
print(values)