Я получаю сообщение об ошибке при использовании urllib и bs4 «http.client.BadStatusLine:»

#python #beautifulsoup

#python #beautifulsoup

Вопрос:

У меня есть этот файл под названием ‘recognized.txt ‘ в котором есть такой текст

Ссылка на recognized.txt :https://drive.google.com/file/d/1yCQz6cQPDmcCOuXBOCAX4nvNoUqewE0y/view?usp=sharing

:

Мой код:-

 f = open('recognized.txt','r')
message = f.read()
message.replace(" ", "")
print(message)
f.close()


import bs4 as bs
import urllib.request
url = ('https://html.duckduckgo.com/html?q=' message)                                                              # no javascript



sauce = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(sauce, 'lxml')
a = soup.body.b
print(a)

for i in soup.find_all('a', class_='result__snippet'):
    print(i.get_text(separator=' - ', strip=True))
  

Поэтому, когда я запускаю приведенный выше код, он выдает ошибку как:-

 Traceback (most recent call last):
  File "D:ocrwebparse.py", line 26, in <module>
    sauce = urllib.request.urlopen(url).read()
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36liburllibrequest.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36liburllibrequest.py", line 526, in open
    response = self._open(req, data)
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36liburllibrequest.py", line 544, in _open
    '_open', req)
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36liburllibrequest.py", line 504, in _call_chain
    result = func(*args)
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36liburllibrequest.py", line 1361, in https_open
    context=self._context, check_hostname=self._check_hostname)
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36liburllibrequest.py", line 1321, in do_open
    r = h.getresponse()
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36libhttpclient.py", line 1331, in getresponse
    response.begin()
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36libhttpclient.py", line 297, in begin
    version, status, reason = self._read_status()
  File "C:UsersPraveenAppDataLocalProgramsPythonPython36libhttpclient.py", line 279, in _read_status
    raise BadStatusLine(line)
http.client.BadStatusLine: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


  
  1. Что означает ошибка?

  2. Почему я получаю эту ошибку?

Ответ №1:

После запуска вашего кода с вашим текстовым файлом мне удалось воспроизвести проблему. Это то, что я сделал:

  • Удалил все новые строки из вашего сообщения и пробелы с помощью strip()
  • удален ‘lxml’ из BeautifulSoup()

Кажется, это дает достойный результат.

 import bs4 as bs
import urllib.request

with open('Downloads/recognized.txt') as f:
    message = f.read().strip()

url = ('https://html.duckduckgo.com/html?q=' message)

sauce = urllib.request.urlopen(url).read()
soup = bs.BeautifulSoup(sauce)
a = soup.body.b
print(a)

for i in soup.find_all('a', class_='result__snippet'):
    print(i.get_text(separator=' - ', strip=True))
  

Распечатка выглядит следующим образом:

 <b>Dinosaur</b>
Dinosaurs - are a diverse group of reptiles of the clade Dinosauria. They first appeared during the Triassic period, between 243 and 233.23 million years ago...
🎦 - Dinosaur - . Quite the same Wikipedia. Just better. - Dinosaur - . From Wikipedia, the free encyclopedia.
Мультфильм, триллер, приключения. Режиссер: Эрик Лейтон, Ральф Зондаг. В ролях: Элфри Вудард, Осси Дэвис, Макс Казелла и др. Путешествие трехтонного игуанодонта по имени Аладар...
Перевод слова - dinosaur - , американское и британское произношение, транскрипция, словосочетания, примеры использования.
  

Похоже, проблема связана с вашей переменной message. Я очистил его, так что это простая строка без новых строк. Теперь все работает нормально.

Комментарии:

1. Да, я добавил ссылку в свой вопрос, вы можете проверить это

2. Я скорректировал код в соответствии с вашим новым форматом сообщения. По сути, ваша строка сообщения не была очищена должным образом.