1
resposta

Obtendo o valor dentro do HTML

Estava praticando o que foi ensinado na aula com o que achei neste site. https://webscraper.io/test-sites/e-commerce/allinone/phones/touch

Achei o html referente ao primeiro item, que é este abaixo, nomeado como 'dados:

<div class="col-sm-4 col-lg-4 col-md-4">
<div class="thumbnail">
<img alt="item" class="img-responsive" src="/images/test-sites/e-commerce/items/cart2.png"/>
<div class="caption">
<h4 class="pull-right price">$24.99</h4>
<h4>
<a class="title" href="/test-sites/e-commerce/allinone/product/486" title="Nokia 123">Nokia 123</a>
</h4>
<p class="description">7 day battery</p>
</div>
<div class="ratings">
<p class="pull-right">11 reviews</p>
<p data-rating="3">
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
</p>
</div>
</div>
</div>

Ao tentar obter a pontuação do item, cheguei até esta parte mas não consigo seguir adiante.

dados.find('div', {'class': 'ratings'}).p.findNext()

<p data-rating="3">
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
<span class="glyphicon glyphicon-star"></span>
</p>

Como consigo obter o valor contido em 'data-rating'? O número atribuido ao data-rating é a pontuação do item e cada item tem uma pontuação diferente, variando entre 1 e 4.

1 resposta

Oi Eduardo,

Segue um trecho de código que pode ajudar nos seus estudos:

from urllib.request import urlopen
from bs4 import BeautifulSoup

response = urlopen('https://webscraper.io/test-sites/e-commerce/allinone/phones/touch')
html = response.read().decode('utf-8')
soup = BeautifulSoup(html, 'html.parser')
for item in soup.findAll(lambda tag:tag.name=='p' and 'data-rating' in tag.attrs.keys()):
    print(item.get('data-rating'))

3

3

3

4

1

1

1

2

1

A função lambda dentro do findAll foi utilizada para selecionar apenas as tags p que contenham o atributo data-rating. Como o método get obtemos o valor deste atributo.

Espero ter ajudado