#beautifulsoup
#beautifulsoup
Вопрос:
Как мне получить значение из ‘data-timestamp’ и преобразовать его в целое число с помощью BeautifulSoup. Я перебираю каждую строку на веб-сайте (который является классом tr).
Итак, если бы я должен был настроить код как
ratings = []
rows = soup.select('tbody tr')
for row in rows:
'insert code here'
ratings.append(rating)
Однако, похоже, я не могу получить доступ к значению в data-timestamp. Я пробовал использовать attrs, но предполагаю, что делаю это неправильно. Любая помощь была бы высоко оценена.
<td data-timestamp="4.5833333333333" class="hide-on-hover fill-space relative">
<div class="col border-box text-center nowrap row large-up-text-right padding-horz-small push">```
Ответ №1:
Это должно дать вам строковое значение:
[...]
for row in rows:
data_timestamp_str = row.find("td")['data-timestamp']
[...]
Вы можете преобразовать строку в целое число с помощью int(data_timestamp_str)
, но обратите внимание, что в вашем примере данных это не сработает, потому что значение data-timestamp
равно 4,583333333333, что не является целым числом.
Комментарии:
1. На самом деле я получаю сообщение об ошибке при запуске этого. Это выдает мне ключевую ошибку: ‘data-timestamp’. Есть мысли?
2. @ZacharyWyman вы должны отладить то, что находится в каждом из ваших элементов «row». Возможно, вам нужно сначала исправить селекторы для ваших строк, чтобы они действительно содержали
td
элементы, которые вам затем нужно выбрать. Сложно отладить это для вас, не имея всего документа, который вы анализируете, или вашего кода.
Ответ №2:
Получите доступ к тегу с помощью []
, затем округлите его до двух десятичных знаков, например:
from bs4 import BeautifulSoup
html_doc = """<td data-timestamp="4.5833333333333" class="hide-on-hover fill-space relative">
<div class="col border-box text-center nowrap row large-up-text-right padding-horz-small push">```"""
soup = BeautifulSoup(html_doc, 'html.parser')
ratings = []
rows = soup.select('td')
for row in rows:
ratings.append(round(float(soup.select_one('td')['data-timestamp']), 2))
print(*ratings)
Выводит:
4.58
Комментарии:
1. Привет @Mendel G, спасибо, я так и сделаю. Я только что попробовал точно такой же код, который вы использовали, и я получил ошибку ключа: ‘data-timestamp’. Есть мысли о том, почему это происходит? Я не установил определенный пакет?
2. @ZacharyWyman Если вы посмотрите на мой код, я изменил селектор для
rows
.rows = soup.select_one('td')
. Но в вашем коде этоrows = soup.select('tbody tr')
. обратите также внимание наselect_*one*
проверку правильности селекторов. дайте мне знать