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

Web scrap não funciona

Ao tentar fazer o web scrapping, mesmo já tendo os requests e bs4 instalados, quando executo o código aparece o seguinte erro

---------------------------------------------------------------------------
TimeoutError                              Traceback (most recent call last)
File C:\ProgramData\Anaconda3\lib\site-packages\urllib3\connection.py:174, in HTTPConnection._new_conn(self)
    173 try:
--> 174     conn = connection.create_connection(
    175         (self._dns_host, self.port), self.timeout, **extra_kw
    176     )
    178 except SocketTimeout:

File C:\ProgramData\Anaconda3\lib\site-packages\urllib3\util\connection.py:95, in create_connection(address, timeout, source_address, socket_options)
     94 if err is not None:
---> 95     raise err
     97 raise socket.error("getaddrinfo returns an empty list")

File C:\ProgramData\Anaconda3\lib\site-packages\urllib3\util\connection.py:85, in create_connection(address, timeout, source_address, socket_options)
     84     sock.bind(source_address)
---> 85 sock.connect(sa)
     86 return sock

TimeoutError: [WinError 10060] Uma tentativa de conexão falhou porque o componente conectado não respondeu
corretamente após um período de tempo ou a conexão estabelecida falhou
porque o host conectado não respondeu

During handling of the above exception, another exception occurred:

E continua por mais algumas linhas, o que pode ser?

4 respostas

Oi, Gabriela! Tudo bem?

Para te ajudar mais, você poderia enviar seu código (que ocasionou o erro) e também o seu erro completo? Você enviando esses dados eu posso entender melhor o que foi feito.

Fico no aguardo do seu retorno!

Oie Mirla, claro! O código:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url='https://www.federalreserve.gov/releases/h3/current/default.htm'
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html, 'html.parser')
table = soup.findAll('table')
html_file = f'<html><body>{table}</body></html>'
df = pd.read_html(html_file)

# Como a função read_html retorna uma lista de DataFrames, basta acessar as tabelas pelos índices da lista.
# Como temos três tabelas na página usamos os índices 0, 1 ou 2 para acessar os DataFrames que buscamos
df[0]

*O erro infelizmente está dando mais caracteres que o permitido, vou colocar o final dele, não sei se ajuda: *


MaxRetryError: HTTPSConnectionPool(host='www.federalreserve.gov', port=443): Max retries exceeded with url: /releases/h3/current/default.html (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000025B4480D910>: Failed to establish a new connection: [WinError 10060] Uma tentativa de conexão falhou porque o componente conectado não respondeu\r\ncorretamente após um período de tempo ou a conexão estabelecida falhou\r\nporque o host conectado não respondeu'))

During handling of the above exception, another exception occurred:

ConnectionError                           Traceback (most recent call last)
Input In [27], in <cell line: 6>()
      3 import pandas as pd
      5 url='https://www.federalreserve.gov/releases/h3/current/default.html'
----> 6 response = requests.get(url)
      7 html = response.content
      8 soup = BeautifulSoup(html, 'html.parser')

File C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py:75, in get(url, params, **kwargs)
     64 def get(url, params=None, **kwargs):
     65     r"""Sends a GET request.
     66 
     67     :param url: URL for the new :class:`Request` object.
   (...)
     72     :rtype: requests.Response
     73     """
---> 75     return request('get', url, params=params, **kwargs)

File C:\ProgramData\Anaconda3\lib\site-packages\requests\api.py:61, in request(method, url, **kwargs)
     57 # By using the 'with' statement we are sure the session is closed, thus we
     58 # avoid leaving sockets open which can trigger a ResourceWarning in some
     59 # cases, and look like a memory leak in others.
     60 with sessions.Session() as session:
---> 61     return session.request(method=method, url=url, **kwargs)

File C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py:529, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    524 send_kwargs = {
    525     'timeout': timeout,
    526     'allow_redirects': allow_redirects,
    527 }
    528 send_kwargs.update(settings)
--> 529 resp = self.send(prep, **send_kwargs)
    531 return resp

File C:\ProgramData\Anaconda3\lib\site-packages\requests\sessions.py:645, in Session.send(self, request, **kwargs)
    642 start = preferred_clock()
    644 # Send the request
--> 645 r = adapter.send(request, **kwargs)
    647 # Total elapsed time of the request (approximately)
    648 elapsed = preferred_clock() - start

File C:\ProgramData\Anaconda3\lib\site-packages\requests\adapters.py:519, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
    515     if isinstance(e.reason, _SSLError):
    516         # This branch is for urllib3 v1.22 and later.
    517         raise SSLError(e, request=request)
--> 519     raise ConnectionError(e, request=request)
    521 except ClosedPoolError as e:
    522     raise ConnectionError(e, request=request)

ConnectionError: HTTPSConnectionPool(host='www.federalreserve.gov', port=443): Max retries exceeded with url: /releases/h3/current/default.html (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000025B4480D910>: Failed to establish a new connection: [WinError 10060] Uma tentativa de conexão falhou porque o componente conectado não respondeu\r\ncorretamente após um período de tempo ou a conexão estabelecida falhou\r\nporque o host conectado não respondeu'))
solução!

Oi Gabriela!

O seu código está todo correto, então esse erro pode ser de alguma configuração em sua máquina virtual. Você está utilizando o Jupyter Notebook? Se sim, tente por gentileza executar o mesmo código no google colab e verifique se ele retorna algum erro.

Testei aqui pelo google colab e funcionou! Muito obrigada Mirla