Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

O que significa '::before' e '::after' em um documento html?

Estou tentando aplicar o conhecimento adquirido nesse curso para coletar alguns dados, nesse site, para um pesquisa do mestrado.

Eu preciso acessar os dados dessa tag table (quadrado amarelo), porém, quando procuro por soup.find('table'), nada é encontrado.

Também tentei procurar por soup.find('div', id="app") (quadrado verde), mas nada é encontrado.

Print1

Se eu procurar por soup.find('div',{'class':"container", 'id':"maincontentcontainer"}), obtenho isso: <div class="container" id="maincontentcontainer"><div id="search-container"></div></div>

E se eu procurar por soup.find('div',id="search-container"), obtenho apenas <div id="search-container"></div>, como se não existisse nada dentro do bloco

Eu notei que esse bloco <div id="search-container"></div> está entre esses termos::before e ::after. Eu suspeito que seja por causa disso que não consigo acessar os termos dentro do bloco <div id="search-container"></div>.

print2

Se alguém puder dar qualquer ajuda , agradeço.

Esse é o código que usei:

from bs4 import BeautifulSoup
import pandas as pd
from urllib.request import Request, urlopen

response = urlopen(url)
html = response.read()

html = html.decode('utf-8')
html = " ".join(html.split()).replace('> <', '><')

soup = BeautifulSoup(html, 'html')
soup.find('div',{'class':"container", 'id':"maincontentcontainer"})
soup.find('div',id="search-container")
soup.find('div', id="app")
soup.find('div', id="app")soup.find('table')
1 resposta
solução!

Oi Helmut, como você está?

Peço desculpas pela demora em obter um retorno.

Os elementos ::before e ::after são características do CSS, onde são responsáveis por criar espaço para que o CSS atue antes ou depois de um determinado conteúdo. Caso queira aprofundar mais em relação a este tipo de conteúdo focado em frontend (HTML, CSS), recomendo a formação de HTML e CSS.

Porém, o fator que impossibilita a captura dos dados não tem relação com esses elementos, mas sim a estrutura HTML em que o site foi elaborado, pois, o mesmo não segue bons padrões de programação. Analisando melhor, é possível identificar várias tabelas mal formatadas, por exemplo.

Mas, lamentavelmente, isso é algo comum no cenário de web scraping, nem sempre teremos um código que seja agradável e simples de analisar e extrair os dados :/

Para esse cenário em específico, você precisará de uma biblioteca mais potente para capturar as informações, como a Selenium. Através dela é possível simular um navegador real, efetuando cliques e coletando o HTML mesmo após algum carregamento dinâmico da página.

Infelizmente, não temos um curso que aborda Selenium com a linguagem Python, porém, aqui no fórum temos alguns tópicos que abordam um pouco mais sobre o Selenium e suas utilizações, recomendo a leitura:

Para extrair os dados do RCSB, a ideia é que você utilize o Selenium para capturar o código fonte da página (driver.page_source) e após isso, manipule o HTML extraído via BeautifulSoup. Vale ressaltar que será necessário pegar a informação como é demonstrado neste curso, sem necessariamente pegá-las em forma de tabela, pois, o HTML da página não é estruturado o bastante para retornar as informações completas de uma só vez. Ou seja, caso queira pegar o título, pegue a tag que contém o título e adicione todos os títulos em uma lista. Caso queira pegar o autor, pegue a tag que contém o autor e adicione todos em uma lista. Após isso, crie um DataFrame com as informações.

Qualquer dúvida fico à disposição.

Grande abraço e bons estudos!