Наиболее непосредственно вы можете использовать select
и :nth-child(odd)
:
from bs4 import BeautifulSoup
html = """
<div>
<div class="tcell" style="width:175px;">
<a name="post6425787">
<img alt="Old"
class="inlineimg"
src="https://www.f150forum.com/images/statusicon/post_old.gif"
/>
</a>
12-10-2019, 06:13 PM
</div>,
<div class="tcell">Smawgunner</div>,
<div class="tcell" style="width:175px;">
<a name="post6425799">
<img alt="Old"
class="inlineimg"
src="https://www.f150forum.com/images/statusicon/post_old.gif"
/>
</a>
12-10-2019, 06:18 PM
</div>,
<div class="tcell">CKsBAT</div>
</div>
"""
soup = BeautifulSoup(html, "lxml")
for x in soup.select("div.tcell:nth-child(odd)"):
print(x.text.strip())
Вывод:
12-10-2019, 06:13 PM
12-10-2019, 06:18 PM
Если вам нужна точность, основанная на характере содержимого, вы можете использовать регулярное выражение, которое точно соответствует вашему формату даты (в окружении ничего, кроме пробелов; при необходимости ослабьте регулярное выражение):
import re
soup = BeautifulSoup(html, "lxml")
pattern = r"^\s*(\d\d-){2}\d{4}, \d\d:\d\d [AP]M\s*$"
for x in soup.find_all(text=re.compile(pattern)):
print(x.strip())
Если ваш формат даты неопределенный, и вы хотите получить все, что может быть проанализировано как дата:
from dateutil.parser import parse as parse_date
soup = BeautifulSoup(html, "lxml")
def try_parse_date(s):
try: return parse_date(s, fuzzy=True)
except ValueError: pass
for x in soup.find_all(text=try_parse_date):
print(x.strip())