Python decode () не может декодировать страницу индекса Google? - PullRequest
0 голосов
/ 07 марта 2020

В настоящее время я пытаюсь реализовать приложение "Получить веб-страницу из источника и сохранить ее как файлы в локальном каталоге", и у меня много проблем ...

Один из моих проблема в том, что я попытался связаться с Google с запросом GET, получить файл html и сохранить его в локальном каталоге. Вот мой полный код для этой части программы:

from socket import *
import sys

SN = "www.google.com"
SP = 80

Csocket = socket(AF_INET, SOCK_STREAM)
Csocket.connect((SN, SP))
Header = 'GET /' +""+ ' HTTP/1.1\r\n' + "Host: " + "www.google.com\r\n" + "Connection: close\r\n" + 
"Accept-language: us-en\r\n" + "Cache-Control: public\r\n\r\n"

Csocket.send(Header.encode())
result = Csocket.recv(999999) .decode('UTF-8')#.split("\r\n\r\n", 1)[1]  
fn = "Google"+".html"
file = open(fn, 'a')
file.write(result)
print(result)

Вроде все работает, я получаю ответ 200 OK html. но когда я пытаюсь декодировать ответ с сервера Google с помощью функции .decode(), я получаю сообщение об ошибке:

Traceback (most recent call last):
File "C:/Users/artha/PycharmProjects/WEEEB/venv/Client.py", line 11, in <module>
result = Csocket.recv(999999) .decode('UTF-8').split("\r\n\r\n", 1)[1]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 45407: invalid start byte

Затем я переключаюсь на .decode(utf-16), и это была та же самая история

UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0x3e in position 47770: truncated data

Честно говоря, я понятия не имею, что здесь происходит, пожалуйста, помогите мне! Спасибо.

Кстати, кто-нибудь знает, как установить размер буфера "dynamici c" socket.recv()? есть большой сайт и есть маленький сайт. Поэтому я вынужден установить очень большой размер буфера, чтобы ничего не пропустить. Может кто-нибудь сказать, пожалуйста, как я могу позволить программе настроить размер буфера, чтобы соответствовать входящим данным? большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...