1
resposta

TypeError: can't concat str to bytes

Olá, estou com esse erro, :

QUANDO:

from urllib.request import urlopen
from bs4 import BeautifulSoup
from tratar_html import trata_html

# criar objeto BeautifulSoup
def cria_bs(input, parametros=None):
    response = urlopen(input, parametros)
    html = response.read()
    html = html.decode('utf-8')
    html = trata_html(html)
    return BeautifulSoup(html, 'html.parser')

ERRO:

{'headers': 'https://xxxxxxxx.yyyy.com.br/consulta/wwwwww.php?bb=QQ&pppp=1547795425498&seq=1'}
Traceback (most recent call last):
  File "c:/Temp/web_scraping_trf1.py", line 73, in <module>
    html_partes_detalhes_bs = cria_bs(url_detalhes_partes, parametros)
  File "c:\Temp\criar_bs.py", line 7, in cria_bs
    response = urlopen(input, parametros)
  File "C:\Temp\anaconda3\lib\urllib\request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Temp\anaconda3\lib\urllib\request.py", line 525, in open
    response = self._open(req, data)
  File "C:\Temp\anaconda3\lib\urllib\request.py", line 542, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "C:\Temp\anaconda3\lib\urllib\request.py", line 502, in _call_chain
    result = func(*args)
  File "C:\Temp\anaconda3\lib\urllib\request.py", line 1397, in https_open
    return self.do_open(http.client.HTTPSConnection, req,
  File "C:\Temp\anaconda3\lib\urllib\request.py", line 1354, in do_open
    h.request(req.get_method(), req.selector, req.data, headers,
  File "C:\Temp\anaconda3\lib\http\client.py", line 1255, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "C:\Temp\anaconda3\lib\http\client.py", line 1301, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "C:\Temp\anaconda3\lib\http\client.py", line 1250, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "C:\Temp\anaconda3\lib\http\client.py", line 1047, in _send_output
    chunk = f'{len(chunk):X}\r\n'.encode('ascii') + chunk \
TypeError: can't concat str to bytes
1 resposta

Oii Francisco! Tudo bem contigo?

Utilizando a função trata_html da forma como é ensinada no curso e executando sua função cria_bs, tudo funcionou certinho por aqui. Observe:

from urllib.request import urlopen
from bs4 import BeautifulSoup

def trata_html(input):
  return " ".join(input.split()).replace('> <', '><')

# criar objeto BeautifulSoup
def cria_bs(input, parametros=None):
    response = urlopen(input, parametros)
    html = response.read()
    html = html.decode('utf-8')
    html = trata_html(html)
    return BeautifulSoup(html, 'html.parser')

url = 'https://alura-site-scraping.herokuapp.com/index.php'
soup = cria_bs(url)
soup

Executando o código acima no Google Colab:

Célula do Google Colab na qual é executado o código mostrado anteriormente. Como resultado desse tópico encontra-se um html disposto em uma única linha

Analisando o código da sua função cria_bs, não identifiquei nenhum erro. Sendo assim, provavelmente o erro esteja em alguma outra parte do seu código, como, por exemplo, no arquivo da sua função trata_html ou ainda no momento em que você chama a função cria_bs.

Para conseguir te ajudar melhor, vou te pedir que envie aqui no fórum o seu código completo. Como você está utilizando mais de um arquivo para criar seus programas, você pode compactar todos eles e encaminhar o link do arquivo compactado aqui no fórum para que possamos tentar identificar o motivo do erro :)

Aguardo seu retorno. Bons estudos!