Как извлечь словарь из тега span?

#python #web-scraping #beautifulsoup

#python #соскабливание полотна #прекрасный суп

Вопрос:

Результат этого :

 soup.find('span', {'class':'js-date-picker btn--secondary btn--secondary--no-spacing'})
  
 <span class="js-date-picker btn--secondary btn--secondary--no-spacing" data-clear="/h/?type=lnamp;amp;search=ethereumamp;amp;lang=enamp;amp;searchheadlines=1" data-date='{"sel":false,"latest":1599889680,"now":1599897600}' data-href="/h/?type=lnamp;amp;search=ethereumamp;amp;lang=enamp;amp;searchheadlines=1amp;amp;d=" href="javascript://">
<span class="btn--secondary__icon"><i class="far fa-calendar-alt"></i></span>
<span class="btn--secondary__label">
<span class="dtctxt"><span class="d">12 Sep</span><span class="t"> 06:48</span></span></span>
</span>
  

Теперь я хочу извлечь {"sel":false,"latest":1599889680,"now":1599897600} из этого текста

Как я могу это сделать?

Ответ №1:

Попробуйте это:

 import ast

from bs4 import BeautifulSoup


html = """
<span class="js-date-picker btn--secondary btn--secondary--no-spacing" data-clear="/h/?type=lnamp;amp;search=ethereumamp;amp;lang=enamp;amp;searchheadlines=1" data-date='{"sel":false,"latest":1599889680,"now":1599897600}' data-href="/h/?type=lnamp;amp;search=ethereumamp;amp;lang=enamp;amp;searchheadlines=1amp;amp;d=" href="javascript://"></span>
<span class="btn--secondary__icon"><i class="far fa-calendar-alt"></i></span>
<span class="btn--secondary__label">
<span class="dtctxt"><span class="d">12 Sep</span><span class="t"> 06:48</span></span></span>
</span>
"""

soup = BeautifulSoup(html, 'html.parser').find("span", {"class": "js-date-picker btn--secondary btn--secondary--no-spacing"})
result = soup.get("data-date")
print(result)

  

Вывод:

 {"sel":false,"latest":1599889680,"now":1599897600}
  

Если вам нужно, вы можете преобразовать результат в dict объект, например:

 data_date = ast.literal_eval(result.replace("false", "False"))
print(data_date['now'])
  

Вывод: 1599897600

Комментарии:

1. Спасибо за предложение, я использовал это, и оно также работает : json.loads(soup.find('span', {'class':'js-date-picker btn--secondary btn--secondary--no-spacing'}).get("data-date"))