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

Por que não consigo acessar toda página?

Por que não consigo acessar todas as partes da página? Eu estava tentando fazer um web scrapping numa página aleatória, coloco certinho o nome das tags uso o attr que representa o que procuro, mas não puxa. Fica dando lista fazia ou none. Tem partes do html que é inacessível? Por exemplo, nunca consigo pegar o href. eu uso. por exemplo : site.findAll('h2', {'class' : '.....'}).get('href') Ai fica dando erro. Alguém poderia me ajudar?

9 respostas

Boas Paulo! Tudo bem?

Você poderia compartilhar o código no qual você está trabalhando? Dessa forma fica mais fácil entender se há algum problema com o código ou se a página tem alguma proteção contra o scrapping.

Fico no aguardo!

Eu estou tentando fazer um web scrapping no geek hunter, para pegar dados das vagas de emprego para cientista de dados e fazer uma análise, e obviamente eu tenho que fazer uma automatização para passar de página e entrar em cada vaga de emprego. E estou querendo pegar, primeiramente, esta parte aqui : Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Agora vou mostrar meu código : Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como visto, eu consegui puxar a parte que eu queria, né? Mas eu quero exatamento o href, para eu conseguir entrar na vaga. Então eu tento fazer isso aqui para conseguir : Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como visto, ele deu none, como se não existisse nada. Mas se você observar, tinha o href, e eu só queria tentar puxar ele. Tem um outro caso que eu coloco exatamente como tá, e nao aparece nada.

Tudo bem Paulo? Vou deixar a forma com que eu resolvi o problema:

Antes de tudo, vamos importar as biblotecas necessárias:

import requests
from bs4 import BeautifulSoup

Agora vamos carregar as informações da página:

r = requests.get('https://www.geekhunter.com.br/vagas')

Agora, basta criar um soup dessas informações pra que a gente possa fazer o parseamento:

soup = BeautifulSoup(r.text)

Para encontrar as informações, eu vi inspecionando os elementos HTML que eles estão organizados da seguinte maneira:

Cada vaga tem uma div chamada information, que contém todas as informações da vaga, incluindo o link que você deseja, sendo que esse link está dentro de uma tag a.

Para conseguir salvar cada vaga, vou fazer uma lista com essas tags information:

informacoes = soup.find_all('div', class_='information')

Agora, basta buscar o link que está na tag a:

link =informacoes[1].find('a')['href']
link

Para essa vaga - informações[1] - o link retornado é esse:

'/vaga/desenvolvedor-a-mobile-pleno-remoto-13'

Perceba que falta o começo da página, então devemos adicionar esse início:

link_completo = f'https://www.geekhunter.com.br{link}'
link_completo

que retorna:

'https://www.geekhunter.com.br/vaga/desenvolvedor-a-mobile-pleno-remoto-13'

Agora vamos criar um laço que faz isso para cada uma das vagas:

links = []
for info in informacoes:
    link = info.find('a')['href']
    link_completo = f'https://www.geekhunter.com.br{link}'
    links.append(link_completo)

Acessando links, temos uma lista de todos os links das vagas:

['https://www.geekhunter.com.br/vaga/analista-de-dados-remoto-python',
 'https://www.geekhunter.com.br/vaga/desenvolvedor-a-mobile-pleno-remoto-13',
 'https://www.geekhunter.com.br/vaga/desenvolvedor-a-front-end-react-senior-remoto-13',
 'https://www.geekhunter.com.br/vaga/desenvolvedor-a-c-remoto-25',
 'https://www.geekhunter.com.br/vaga/desenvolvedor-a-front-end-1235',
 'https://www.geekhunter.com.br/vaga/squad-lead-remoto',
 'https://www.geekhunter.com.br/vaga/desenvolvedor-a-linux-pleno-2',
 'https://www.geekhunter.com.br/vaga/desenvolvedor-a-back-end-php-62',
 'https://www.geekhunter.com.br/vaga/desenvolvedor-a-mobile-remoto-32',
 'https://www.geekhunter.com.br/vaga/desenvolvedor-a-java-back-end-remoto-6']
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Eu posso substituir o urllib por esse request?

Pode sim, sem problemas!

Por que ele ensinou usando o urllib sendo que o request tá sendo mais fácil?

Boa pergunta Paulo!

Eu , pessoalmente, tenho mais costume com o uso da biblioteca requests. Ela já vem com o Python e é bastante mais básico em comparação ao urlib. Creio que o professor tenha optado pelo urllib justamente porque ele oferece mais parâmetros e opções.

Mas pode optar por usar qualquer uma, desde que atenda à sua necessidade.

Eu estou com um problema na hora de passar pra um arquivo txt as informações. Ele pula de linha automaticamente, sem que eu peça. Mostrarei : Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Tudo bem Paulo?

Algumas considerações sobre esses problemas.

Primeiramente, como a sua última dúvida não tem relação a que você abriu esse tópico e peço que você abra um novo tópico para que a as questões fiquem mais organizadas.

Além disso, peço que dê mais contexto para a questão. Como não tenho acesso ao código, e também não compreendo exatamente qual é o seu objetivo, fica mais difícil de entender qual a necessidade desse bloco de código. E só olhando pro resultado é mais difícil identificar o problema.

Sobre isso, sugiro usar a opção de colocar parte do seu código aqui no fórum, que pode ser feito pela ferramenta de código que está na barra de opções:

Print da Barra da opções do fórum, com destaque à opção de inserir bloco de código, em vermelhoOu pelo atalho + +.

Além disso, ressalto que como sua dúvida trata-se de um projeto pessoal, há a possibilidade dela demorar um pouco mais para ser respondida, mas, tentaremos ser breves.