Как получить значение между двумя идентификаторами span в Python, используя мыло - PullRequest
0 голосов
/ 15 октября 2018

Я хочу получить все значения между двумя идентификаторами диапазона, например, от RAOCSTD2018-10-27 до RAOCSTD2018-10-30, как мне этого добиться.Ниже приведен мой текущий код, но я могу получить только одно значение из одного специального идентификатора диапазона.

from bs4 import BeautifulSoup

html = """<tr id="RAOCSTD-dates" class="availability selected">
                                <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>
                        </tr>"""

 soup = BeautifulSoup(html, 'html.parser')

 allvaluesbetweentwospanid = {}
for li_tag in soup.find_all('tr', {'class':'availability selected'}):
        # for span_tag in li_tag.find_all('li', {'class':'list-group-item'}):

        value = li_tag.find('span', {'id':room_instance + chek_in}).text
        allvaluesbetweentwospanid [] = value

1 Ответ

0 голосов
/ 15 октября 2018

Возможно, вам будет легче, если вы отформатируете свой код более тщательно.Я очистил его и добавил несколько недопустимых примеров в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...