Фильтрация запроса для показа только 6 минут и ниже - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь отфильтровать все запуски продолжительностью <= 6 минут и вывести время, уровень и ссылку на профиль пользователя. </p>

Проблема в том, что я перепутал символы с целыми, поэтому мне нужно удалить символы и отформатировать их, чтобы выходные данные выглядели хорошо. Затем я могу перейти на уровень, а затем в профиль.

import requests
from bs4 import BeautifulSoup

rBarb = requests.get("https://eu.diablo3.com/en/rankings/season/17/rift-barbarian").text
soup = BeautifulSoup(rBarb, "html.parser")
pContainer = soup.find(id=("ladders"))
#print(pContainer)
rRiftTime = pContainer.find_all(class_="cell-RiftTime")
print(rRiftTime)

Это то, что у меня есть. Буду очень признателен за любую помощь!

Спасибо и всего наилучшего.

1 Ответ

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

Вы можете использовать datetime.timedelta объект для легкой фильтрации результатов по времени:

import requests
from bs4 import BeautifulSoup
import re
from datetime import timedelta

rBarb = requests.get("https://eu.diablo3.com/en/rankings/season/17/rift-barbarian").text
soup = BeautifulSoup(rBarb, "lxml")

# parse the data
data = []
for tr in soup.select('#ladders-table tr')[1:-1]:
    d = [td.text.strip() for td in tr.select('td')] + [tr.select_one('a')['href']]
    g = re.search(r'(\d+)m\s([\d.]+)s', d[3])
    d.append(timedelta(minutes=int(g[1]), seconds=float(g[2]))) # convert string to timedelta object for easy filtering
    data.append(d)

# filter data for any results < 6 minutes
filtered = [d for d in data if d[-1] < timedelta(minutes=6)]

for d in filtered:
    print(d)

Отпечатки:

['993.', 'Soulnsane', '100', '5m 37.033s', '06-Jun-2019 19:58:49', '/en/profile/Soulnsane-2303/hero/64459758', datetime.timedelta(0, 337, 33000)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...