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

Todas as linhas iguais

Pessoal, boa tarde!

Tentei reproduzir a rotina de scrapping com um outro site, mas tive dois problemas:

  1. todas as linhas voltaram iguais
  2. o texto veio com informações como "\n\t\t\t\t\t\t\t"

Alguém consegue me ajudar a resolver esses dois problemas?

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

# Declarando variável cards
cards = []

# Obtendo o HTML
response = urlopen('https://manesco.com.br/profissionais-manesco')
html = response.read().decode('utf-8')
soup = BeautifulSoup(html, 'html.parser')

# Obtendo as TAGs de interesse
pessoas = soup.find("div",{"class": "profissionais_caixa_fotos"}).findAll("div",class_ = "profissionais_foto_col")

# Coletando as informações dos cards
for pessoa in pessoas:
    card = {}

    # Nome
    card['nome'] = soup.find('div', {'class': 'profissionais_foto_nome'}).getText()

    # E-mail
    card["email"] = soup.find("div", {"class": "profissionais_frente_email"}).getText()

    # Celular
    card["celular"] = soup.find("div", {"class": "profissionais_frente_cel"}).getText()


    # Adicionando resultado à lista cards
    cards.append(card)

    # Imagens
    box = soup.find("div", {"class": 'profissionais_foto_col'}).img
    urlretrieve(box.get("src"), "./output/img/" + box.get("src").split("-")[-1])


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

Aqui você tem que usar o pessoa no find:

    card['nome'] = pessoa.find('div', {'class': 'profissionais_foto_nome'}).getText()

para remover os '\n' e '\t' pode usar:

card['nome'] =  pessoa.find('div', {'class': 'profissionais_foto_nome'}).getText().replace('\n','').replace('\t','')

Existem modos com regex mas quis deixar simples

Deu certo! Mas quando tento fazer isso com as imagens recebo


AttributeError Traceback (most recent call last) in 33 34 # Imagens ---> 35 box = pessoa.find("div", {"class": 'profissionais_foto_col'}).img 36 urlretrieve(box.get("src"), "./output/img/" + box.get("src").split("-")[-1]) 37

AttributeError: 'NoneType' object has no attribute 'img'

solução!

Use

pessoa.find("img")

ou

pessoa.img

O layout dos div da página está bagunçado. O div da imagem fecha depois dos outros.