2
respostas

Tenho testado para outras pages de sites e aparece sempre o erro -HTTP Error 403: Forbidden

Tenho testado para outras pages de sites e aparece sempre o erro -HTTP Error 403: Forbidden. Como testar o Scrapping para outros sites? quais permissões serão necessarias? tenho que estar cadastrado como usario do site para aplicar scrapping em sua pagina?

2 respostas

Oii Alexandre, como você está?

Peço desculpas pela demora em obter um retorno.

Como testar o Scraping para outros sites? Quais permissões serão necessárias? tenho que estar cadastrado como usuário do site para aplicar scrapping em sua página?

Tudo depende de qual site você almeja fazer o scraping. Supondo que seja um site aberto que não exija login, o que é indispensável é definir o user-agent, para que o código seja capaz de simular o navegador, então para a maioria desses casos, o procedimento é como mostrado no curso.

Já em casos que o site tenha login, temos algumas possibilidades:

Primeira: parametrizar a requisição com os cookies da página

Segunda: efetuar uma requisição POST com os parâmetros da requisição

Terceira: automatizar o procedimento, fazendo com que o código seja capaz de digitar informações, clicar em botões, etc.

  • Primeira: parametrizar a requisição com os cookies da página

Para fazermos isso, o primeiro passo é identificar no site qual cookie iremos utilizar. Normalmente, os sites possuem vários cookies, então devemos analisar e pegar apenas aquele que contém informações sobre a autenticação no site. Esse tipo de cookie geralmente contém em seu nome palavras como login ou session.

Para acessar esse cookie, é importante que você esteja logado nesse site e clique no ícone de cadeado no canto superior esquerdo da página. E identifique o cookie desejado, como mostro na imagem abaixo:

Imagem de um pequeno cadeado cinza na parte superior esquerda da página. Esse cadeado fica localizado antes da url e encontra-se destacado por uma seta vermelha

Ao clicar nesse cadeado, será aberta uma janela onde será possível localizar uma pasta com os cookies da página e após identificar o desejado, basta copiar o seu conteúdo:

Janela que aparece ao clicar no cadeado. Ela possui o título "Cookies em uso" com a aba "Permitido" selecionada. Nessa aba o cookie que possui em seu nome "login.token" encontra-se destacado por um retângulo vermelho e a opção "Conteúdo com os dados desse cookie também encontra-se destacada.

Nisso, dentro da biblioteca de requisições, a request, há um parâmetro para passarmos o cookie, ficará da seguinte forma:

from bs4 import BeautifulSoup
from urllib.request import urlopen
import requests

cookies = {'nome_do_cookie' : 'conteudo_do_cookie''}

response = requests.get(url, cookies = cookies)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
  • Segunda: efetuar uma requisição POST com os parâmetros da requisição

Por padrão, o campo de login e senha é um formulário. E quando trabalhamos com programação web, um formulário é enviado via requisição POST, então, podemos também simular essa requisição. Para isso, é necessário abrir a ferramenta de desenvolvedor e na guia Network, observar qual requisição POST é feita quando clicamos para efetuar o login. E quando localizarmos essa requisição, é necessário atentar-se ao campo form-data, que possui os parâmetros da requisição POST:

Guia Network da ferramenta de desenvolvedor na qual, "Request Method" e o "Form Data" encontram-se destacadas por dois ret ngulos vermelhos

Para o exemplo da imagem acima onde temos no Form Data os parâmetros username, password e uriOnError, o código fica da seguinte forma:

with requests.Session() as session:
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'}
    payload = {'username': USERNAME, 'password': PASSWORD, 'uriOnError': ''}

    s = session.post(url, payload, headers)

    s = session.get(url_interna)

    soup = BeautifulSoup(s.text, 'html.parser')

Continua...

  • Terceira: automatizar o procedimento, fazendo com que o código seja capaz de digitar informações, clicar em botões, etc

Para automatizar esse processo com um programa mais dinâmico que faça o login de forma automática, precisamos utilizar uma biblioteca chamada Selenium. Essa biblioteca permite que seu programa interaja de forma mais dinâmica com a página, digitando textos, clicando em botões, dentre outras coisas, ou seja, você irá executar o código e ele automaticamente interage com as páginas por você. Para conseguirmos utilizar essa biblioteca é necessário baixar o driver do navegador que você está utilizando. Esse driver permitirá que o Selenium acesse seu navegador e execute os procedimentos desejados.

Caso você use o Chrome, você pode acessar essa página e escolher uma versão mais recente que seja compatível com o seu sistema operacional, e, caso seu navegador seja o Firefox, você pode clicar aqui para fazer o download.

Em relação a código, abaixo um exemplo de fazermos login com o Selenium no site do Linkedin :

from selenium.webdriver import Firefox
from bs4 import BeautifulSoup


url_login = ('https://www.linkedin.com/login/')

driver = Firefox()
driver.get(url_login)

driver.find_element_by_name("session_key").send_keys("SEU EMAIL")
driver.find_element_by_name("session_password").send_keys("SUA SENHA")
driver.find_element_by_xpath('//button[@data-litms-control-urn="login-submit"]').click()

driver.get(alguma_url_interna_do_linkedin)

soup = BeautifulSoup(driver.page_source, 'html.parser')

driver.close()

É válido dizer que todas essas são soluções alternativas - sendo o Selenium a mais poderosa delas. Em alguns casos apenas com o cookie você já conseguirá obter os dados, já em outros, terá que recorrer a algo mais robusto como o selenium.

Mas de todo modo, se me permite, aqui vão algumas dicas para o cenário de web scraping:

  • Páginas estáticas são quando o código fonte da página não muda, ou seja, ele é sempre o mesmo independente de qual parte da página estamos. Já nas dinâmicas, o código fonte da página pode ir variando de acordo com qual parte da página você está e a medida que novos elementos dessa página vão sendo carregados. E, no caso de páginas dinâmicas, a Selenium é uma boa alternativa. Nesse outro tópico você encontra um exemplo mais prático de como identificar cada uma dessas páginas.
  • É importante conhecer sobre os códigos de retorno HTTP para ter conhecimento sobre o erro gerado, pois, cada "família" dos retornos HTTP significa algo diferente. A família dos 200 é referente a sucesso da requisição, 400 referente a erro do cliente, 500 erros de servidor e assim por diante. Neste link você encontrará um material detalhado sobre os códigos.
  • Antes de fazer o web scraping, verifique se o site possui alguma API pública, pois caso tenha, pode ser que todos os dados que você precisa já estejam na API.
  • Conheça sobre a ferramenta de desenvolvedor do navegador, tanto em relação a inspecionar a página, quanto para verificar as requisições que são feitas na página (aba de Network)

Qualquer dúvida fico à disposição.

Grande abraço e bons estudos!