Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Eu gostaria ver todos os dados completos da Series como eu faço ?

Este e a minha DataFreme dataset

descricao = dataset['decrisao'].head(10)


type(descricao)

Out[1145]:
pandas.core.series.Series

descricao

Out[1146]:

0 Portátil Gaming LENOVO Legion Y540-15IRH-554 (...

1 Portátil Gaming HP Omen 15-DC1014NP - 6PY04EA ...

2 Portátil Gaming LENOVO Legion Y540-15IRH-901 -...

3 Portátil LENOVO Legion Y540-15-IRH-531 (15.6''...

4 Portátil Gaming HP Pavilion 15-DK0008NP - 7KB6...

5 Portátil Gaming ACER Predator Helios 300 PH315...

6 Portátil ASUS X571GT-59A15PB1 (15.6'' - Intel ...

7 Portátil Gaming ASUS ROG Strix - G531GT-79A15P...

8 Portátil Gaming ACER Nitro 5 AN515-54-77GH - N...

9 Portátil LENOVO Legion Y540-15IRH-278 (15.6'' ...

Name: decrisao, dtype: object `

Eu gostaria ver tudos os dados completos da Series como eu faço ?

Se for possivel ensina me com dividir essa Series em em duas columns ou em duas Series a primera fica so o nome do Pc a segunda fica a descrição do Pc

9 respostas

Olá Celio,

Você pode configurar o pandas para não limitar o tamanho do texto com esse código abaixo:

# Removendo limite para mostrar as linhas completas
pd.set_option('display.max_colwidth', -1)

Para voltar à configuração padrão (cortando o texto) você executa esse código

# Reativando o limite
pd.reset_option('max_colwidth')

Sobre a parte de dividir em duas colunas talvez seja possível, mas vou precisar ver o seu código completo para entender melhor.

Assim

dataset.set_option('display.max_colwidth', -1)

Da erro de "'DataFrame' object has no attribute 'set_option'"

olha esse é o meu código completo :

# Importando bibliotecas
from urllib.request import urlopen, urlretrieve
from bs4 import BeautifulSoup
import pandas as pd
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

# Declarando variável cards
pcgs = []

## Obtendo o HTML e o total de páginas

url = 'https://www.worten.pt/gaming/gaming-pc/portateis-gaming'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

try:
    req = Request(url, headers = headers)
    response = urlopen(req)
    html = response.read().decode('utf-8')

except HTTPError as e:
    print(e.status, e.reason)

except URLError as e:
    print(e.reason)

soup = BeautifulSoup(html, 'html.parser')
#pages = int(soup.find('span', class_="w-filters__element w-filters__results show-for-medium").get_text().split()[-1]) 

## Iterando por todas as páginas do site
#for i in range(pages):

## Obtendo o HTML
url = ('https://www.worten.pt/gaming/gaming-pc/portateis-gaming')
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

try:
    req = Request(url, headers = headers)
    response = urlopen(req)
    html = response.read().decode('utf-8')

except HTTPError as e:
    print(e.status, e.reason)

except URLError as e:
    print(e.reason)

soup = BeautifulSoup(html, 'html.parser')

# Obtendo as TAGs de interesse
anuncio =  soup.find('div', {"id": "products-list-block"}).findAll('div', class_="w-product__wrapper")

    # Coletando as informações dos pcg
for anuncios in anuncio:    # transformando bs4.element.ResultSet para bs4.element.Tag
    pcg = {}

    # Valor
    pcg['value'] = anuncios.find('span', {'class': 'w-currentPrice iss-current-price'}).getText()

    # descriçao
    pcg['decrisao'] = (anuncios.find('h3', {'class': 'w-product__title'}).get_text())

    # Estado
    pcg['Estado_do_PC'] = (anuncios.find('figure', {'class': 'w-product__image'}).get_text().replace('\n', ' '))

    # Quantidade
    #pcg['Quantidade'] = (anuncios.find('div', {'class': 'w-rating'}).get_text().replace('\xa0', ''))


    pcg['Quantidade'] = (anuncios.find('div', {'class': 'w-rating'}).get_text())

    # Adicionando resultado a lista cards
    pcgs.append(pcg)

    # Imagens


# Criando um DataFrame com os resultados
dataset = pd.DataFrame(pcgs)
dataset.to_csv('output/data/dataset.csv', sep=';', index = False, encoding = 'utf-8-sig')
dataset

Resultado DataFrame, a columns descrição eu queria separa em duas coluna, a primera columns vai chama o Nome do pc a segunda vai chama a carateristica do pc

A parte da configuração é direto no pandas não no dataframe, com pd no início e não dataset porque é uma configuração geral do pandas e não de cada dataframe, depois de fazer a configuração quando você for vizualizar o dataset novamente vai aparecer o texto completo, testa novamente por favor.

Sobre a segunda dúvida vou testar o seu código aqui e depois te falo aqui se eu encontrar alguma solução.

Tu queries que eu faço assim :

dataset = pd.DataFrame(pcgs).set_option('display.max_colwidth', -1) no dentro codigo :

Da erro " 'DataFrame' object has no attribute 'set_option'"

# Importando bibliotecas
from urllib.request import urlopen, urlretrieve
from bs4 import BeautifulSoup
import pandas as pd
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

# Declarando variável cards
pcgs = []

## Obtendo o HTML e o total de páginas

url = 'https://www.worten.pt/gaming/gaming-pc/portateis-gaming'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

try:
    req = Request(url, headers = headers)
    response = urlopen(req)
    html = response.read().decode('utf-8')

except HTTPError as e:
    print(e.status, e.reason)

except URLError as e:
    print(e.reason)

soup = BeautifulSoup(html, 'html.parser')
#pages = int(soup.find('span', class_="w-filters__element w-filters__results show-for-medium").get_text().split()[-1]) 

## Iterando por todas as páginas do site
#for i in range(pages):

## Obtendo o HTML
url = ('https://www.worten.pt/gaming/gaming-pc/portateis-gaming')
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}

try:
    req = Request(url, headers = headers)
    response = urlopen(req)
    html = response.read().decode('utf-8')

except HTTPError as e:
    print(e.status, e.reason)

except URLError as e:
    print(e.reason)

soup = BeautifulSoup(html, 'html.parser')

# Obtendo as TAGs de interesse
anuncio =  soup.find('div', {"id": "products-list-block"}).findAll('div', class_="w-product__wrapper")

    # Coletando as informações dos pcg
for anuncios in anuncio:    # transformando bs4.element.ResultSet para bs4.element.Tag
    pcg = {}

    # Valor
    pcg['value'] = anuncios.find('span', {'class': 'w-currentPrice iss-current-price'}).getText()

    # descriçao
    pcg['decrisao'] = (anuncios.find('h3', {'class': 'w-product__title'}).get_text())

    # Estado
    pcg['Estado_do_PC'] = (anuncios.find('figure', {'class': 'w-product__image'}).get_text().replace('\n', ' '))

    # Quantidade
    #pcg['Quantidade'] = (anuncios.find('div', {'class': 'w-rating'}).get_text().replace('\xa0', ''))


    pcg['Quantidade'] = (anuncios.find('div', {'class': 'w-rating'}).get_text())

    # Adicionando resultado a lista cards
    pcgs.append(pcg)

    # Imagens


# Criando um DataFrame com os resultados
dataset = pd.DataFrame(pcgs).set_option('display.max_colwidth', -1)
dataset.to_csv('output/data/dataset.csv', sep=';', index = False, encoding = 'utf-8-sig')
dataset

Não, você vai executar o set_option antes de tudo.

Exemplo:

import pandas as pd
pd.set_option('display.max_colwidth', -1)

# Continuação dos imports...

# Resto do código...
# Código normal para criar o DataFrame sem nenhuma modificação...

dataset = pd.DataFrame(pcgs)
dataset.to_csv('output/data/dataset.csv', sep=';', index = False, encoding = 'utf-8-sig')
dataset

Obrigado deu certo , E possível dividir essa columns em duas

solução!

Depois de dar uma olhada no resultado do seu código vi que tinha sempre parêntesis separando o nome da descrição no seguinte formato:

  • nome (descrição)

  • Portátil Gaming LENOVO Legion Y540-15IRH-901 (Intel Core i7-9750H - NVIDIA GeForce GTX 1650 - RAM: 16 GB - 512 GB SSD - 15.6'')

Assim é possível separar em duas colunas utilizando o parêntese como guia. Segue o código:

# Seu código até depois do for aqui sem alterações...

# Criando um DataFrame com os resultados
dataset = pd.DataFrame(pcgs)

# Separando o nome em uma coluna
# Pega o texto antes do parêntese (
dataset["nome"] = dataset["decrisao"].str.extract("(.*)\(.*\)")

# Separando a descrição em uma coluna
# Pega o texto dentro dos parênteses ()
dataset["decrisao"] = dataset["decrisao"].str.extract("\((.*)\)")

dataset.to_csv('output/data/dataset.csv', sep=';', index = False, encoding = 'utf-8-sig')
dataset

Resultado:

Olha se esse código te ajuda, qualquer dúvida é só falar!

Muito obrigado