2
respostas

DataFrame repetindo a 1° linha

for texto in textos:
    card = {}

    card['Titulo'] = soup.find('h2', {'class' : 'title-post entry-title'}).get_text()

    card['Data'] = data = soup.find('span', {'class': 'posted-on'}).getText()

    card['Link'] = soup.find('a', {'class' : 'read-more'}).get('href')

    cards.append(card)

dataset = pd.DataFrame(cards)
dataset

Olá, como vai?

Usei esse código para gerar um dataframe com os títulos, data de postagem e links dos artigos do meu blog (https://ufabcjr.com.br/blog-de-gestao-empresarial/). A questão é que ele repete as informações do 1° artigo para todas as linhas da página.

Link para a imagem do DataFrame: https://ibb.co/RBvCd9B

Link para imagem do arquivo: https://ibb.co/nkxNHQ2

Desde já, muito obrigado! :))

2 respostas

Boa tarde guilherme, resolvi através do selenium, o programa faz o scraping das 26 paginas entorno de 45 seg.

from selenium import webdriver
from time import sleep
url = 'https://ufabcjr.com.br/blog-de-gestao-empresarial/'
driver = webdriver.Chrome()
driver.get(url)
sleep(2)
lista = []
page = True
while page:
    table = driver.find_elements_by_tag_name('article')
    for box in table:
        tag = box.find_elements_by_tag_name('a')
        table_text = [grade.text for grade in tag]
        n = ', '.join(table_text)
        lista.append(n)
    try:
        btn = driver.find_element_by_xpath('//a[@class="next page-numbers"]').click()
        sleep(1)
    except:
        page = False

A tag 'read more', eu só percebi quando fui passar para você no Alura, mas você pode eliminar através do Dataframe, criando uma coluna especifica e depois excluindo esse dado.

prints: https://ibb.co/NrcRByy

https://ibb.co/4MzzYZP

Henrique, que sensacional!

Muito obrigado por compartilhar o conteúdo/conhecimento e me ajudar!

Forte abraços,

Guilherme

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software