Oi, tudo bem?
Preciso de ajuda no uso de Selenium + Python + Beautifulsoup.
Essa versão do código onde o que é encontrado na página inicial é raspado e armazenado em um json funciona:
from selenium import webdriver
import time
from bs4 import BeautifulSoup
import pandas as pd
import os
lista_noticias = []
navegador = webdriver.Chrome()
url = 'https://www.globo.com/busca/?q=Seguran%C3%A7a%20da%20Informa%C3%A7%C3%A3o'
navegador.get(url)
site = BeautifulSoup(navegador.page_source, 'html.parser')
div_noticia = site.find_all('li', attrs={'class':'widget widget--card widget--info'})
for noticia in div_noticia:
titulo = noticia.find('div', attrs={'class':'widget--info__title product-color'}).text
link = noticia.find('a')['href']
site_publicacao = noticia.find('div', attrs={'class':'widget--info__header'}).text
subtitulo = noticia.find('p', attrs={'class':'widget--info__description'}).text
data_publicacao = noticia.find('div', attrs={'class': 'widget--info__meta'}).text
lista_noticias.append([titulo,link,site_publicacao,subtitulo,data_publicacao])
noticias = pd.DataFrame(lista_noticias, columns=['titulo', 'link', 'site_publicacao','subtitulo','data_publicacao'])
nome_arquivo = "noticias.json"
caminho_arquivo = os.path.join(os.path.dirname(__file__), nome_arquivo)
noticias.to_json(caminho_arquivo, orient='records', lines=True)
print("Arquivo JSON salvo:", caminho_arquivo)**
Porém quando adiciono o Selenium para lidar com o botão de ‘Veja mais’ da página de pesquisa, mesmo com os elementos html corretos, o código não funciona.
from selenium import webdriver
import time
from bs4 import BeautifulSoup
import pandas as pd
import os
lista_noticias = []
navegador = webdriver.Chrome()
url = 'https://www.globo.com/busca/?q=Seguran%C3%A7a%20da%20Informa%C3%A7%C3%A3o'
navegador.get(url)
while True:
try:
botao_veja_mais = navegador.find_elements_by_xpath('//*[@id="content"]/div/div/div/a')
botao_veja_mais.click()
time.sleep(5)
print("Clicou em 'Veja mais'.")
except:
print("Não há mais botões 'Veja mais'.")
break
site = BeautifulSoup(navegador.page_source, 'html.parser')
div_noticia = site.find_all('li', attrs={'class':'widget widget--card widget--info'})
for noticia in div_noticia:
titulo = noticia.find('div', attrs={'class':'widget--info__title product-color'}).text
link = noticia.find('a')['href']
site_publicacao = noticia.find('div', attrs={'class':'widget--info__header'}).text
subtitulo = noticia.find('p', attrs={'class':'widget--info__description'}).text
data_publicacao = noticia.find('div', attrs={'class': 'widget--info__meta'}).text
lista_noticias.append([titulo, link, site_publicacao, subtitulo, data_publicacao])
noticias = pd.DataFrame(lista_noticias, columns=['titulo', 'link', 'site_publicacao', 'subtitulo', 'data_publicacao'])
nome_arquivo = "noticias.json"
caminho_arquivo = os.path.join(os.path.dirname(__file__), nome_arquivo)
noticias.to_json(caminho_arquivo, orient='records', lines=True)
print("Arquivo JSON salvo:", caminho_arquivo)
navegador.quit()**
Todas as bibliotecas estão instaladas corretamente. Alguém sabe como resolver esse problema?