Ошибка Python3 с объектом str и байтовым кодом - PullRequest
0 голосов
/ 11 декабря 2018

Поэтому я попытался написать простую функцию для очистки текста и суммировать его:

def getTextWaPo(url):
page = urllib2.urlopen(url).read().decode('utf8')
soup = BeautifulSoup(page, "lxml")
text = ' '.join(map(lambda p: p.text, soup.find_all('article')))
return text.encode('ascii', errors='replace').replace("?"," ")

, но для этого куска кода я получаю эту ошибку:

  File "Autosummarizer.py", line 12, in getTextWaPo
  return text.encode('ascii', errors='replace').replace("?"," ")
  TypeError: a bytes-like object is required, not 'str'

  line 12 ==> text = getTextWaPo(articleURL)

что должноЯ делаю?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы кодируете данные в строке 12, используя вы должны использовать байты.как replace(b"?", b" ")

код выглядит как

import requests
from urllib.request import urlopen
from bs4 import BeautifulSoup
def getTextWaPo(url):
    page = urlopen(url).read().decode('utf8')
    soup = BeautifulSoup(page, "lxml")
    text = ' '.join(map(lambda p: p.text, soup.find_all('article')))
    return text.encode('ascii', errors='replace').replace(b"?",b" ")
getTextWaPo("https://stackoverflow.com/")
0 голосов
/ 11 декабря 2018

Вы должны изменить свою последнюю строку return text.encode('ascii', errors='replace').replace("?"," ") на return text.encode('ascii', errors='replace').replace(b"?", b" ") , потому что после encode() вы работаете с bytes и должны заменить байты другими байтами.

...