#python-3.x #content-type #web-development-server #content-encoding
#python-3.x #тип содержимого #веб-разработка-сервер #содержимое-кодирование
Вопрос:
У меня есть скрипт обновления инвентаря на Python, который запускается каждую ночь, извлекая инвентарь с веб-сайта. Недавно у меня начались проблемы, и после дальнейшего расследования выяснилось, что когда я просматриваю исходный контент через веб-браузер (view source), это выглядит нормально. Однако, когда я печатаю его на консоль с помощью python, это выглядит очень странно (и нарушает работу скрипта). Интересно, видел ли кто-нибудь что-нибудь подобное или знает, что вызвало это?
Веб-браузер отображает это (URL отредактирован):
<ul class='vnav vnav__subnav vnav--level2'>
<li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Folding Tables</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Bookcases</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Printer Stands</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Computer Desks</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Office Chairs</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Filing Cabinets</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Letter Holders</a>
</li></ul>
</li>
<li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Bathroom</a>
<ul class='vnav vnav__subnav vnav--level2'>
<li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Bathroom Mirrors</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Bathroom Sinks</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Bathroom Cabinets</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Bathroom Vanities</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Laundry Hampers</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Bath Towel Sets</a>
</li><li class='vnav__item'><a href='https://xx.htm' class='vnav__link'>Shower Curtains</a>
</li></ul>
Но Python print() в консоли показывает это (URL отредактирован):
<ul class="vnav vnav__subnav vnav--level2">
<li class="vnav__item"><a class="vnav__link" href="https://xx.htm">Folding Tables</a>
</li><li class="vnav__item"><a class="vnav__link" href="https://xx.htm">Bookcases</a>
</li><li class="vnav__item"><a class="vnav__link" href="https://xx.htm">Printer Stands</a>
</li><li class="vnav__item"><a class="vnav__link" href="https://xx.htm">Computer Desks</a>
</li><li class="vnav__item"><a class="vnav__link" href="https://xx.htm">Office Chairs</a>
</li><li class="vnav__item"><a class="vnav__link" href="https://xx.htm">Filing Cabinets</a>
</li><li class="vnav__item"><a class="vnav__link" href="https://xx.htm">Letter Holders</a>
</li></ul>
</li>
<li class="vnav__item"><a href="https:">/ / x x . h t m ' c l a s s = ' v n a v _ _ l i n k ' amp;> B a t h r o o m / a amp;>
u l c l a s s = ' v n a v v n a v _ _ s u b n a v v n a v - - l e v e l 2 ' amp;>
l i c l a s s = ' v n a v _ _ i t e m ' amp;> a h r e f = ' h t t p s : / / x x . h t m ' c l a s s = ' v n a v _ _ l i n k ' amp;> B a t h r o o m M i r r o r s / a amp;>
/ l i amp;> l i c l a s s = ' v n a v _ _ i t e m ' amp;> a h r e f = ' h t t p s : / / x x . h t m ' c l a s s = ' v n a v _ _ l i n k ' amp;> B a t h r o m S i n k s / a amp;>
/ l i amp;> l i c l a s s = ' v n a v _ _ i t e m ' amp;> a h r e f = ' h t t p s : / / x x . h t m ' c l a s s = ' v n a v _ _ l i n k ' amp;> B a h r o o m C a b i n e t s / a amp;>
/ l i amp;> l i c l a s s = ' v n a v _ _ i t e m ' amp;> a h r e f = ' h t t p s : / / x x . h t m ' c l a s s = ' v n a v _ _ l i n k ' amp;> B a h r o o m V a n i t i e s / a amp;>
/ l i amp;> l i c l a s s = ' v n a v _ _ i t e m ' amp;> a h r e f = ' h t t p s : / / x x . h t m ' c l a s s = ' v n a v _ _ l i n k ' amp;> L a u n r y H a m p e r s / a amp;>
/ l i amp;> l i c l a s s = ' v n a v _ _ i t e m ' amp;> a h r e f = ' h t t p s : / / x x . h t m ' c l a s s = ' v n a v _ _ l i n k ' amp;> B a t h T o w e l S e t s / a amp;>
/ l i amp;> l i c l a s s = ' v n a v _ _ i t e m ' amp;> a h r e f = ' h t t p s : / / x x . h t m ' c l a s s = ' v n a v _ _ l i n k ' amp;> S h o w e C u r t a i n s / a amp;>
/ l i amp;> / u l amp;>
Тип содержимого — «text / html», а кодировка — «ISO-8859-1» в веб-браузере, но при печати через Python отображается «UTF-8». Кроме того, в консоли Python print() отображается вся оставшаяся часть HTML-кода со всеми пробелами и символами, за исключением самого конца, который возвращается к нормальному состоянию (за исключением того, что похоже, что есть 2 тега, что является другой проблемой):
/ b o d y amp;>
/ h t m l amp;>
</a></li></ul></div></nav></body></html>
Наконец, если я попытаюсь декодировать, используя UTF-8 вместо ISO-8859-1, я получаю следующую ошибку:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 74396: invalid continuation byte
Ответ №1:
Неважно, разобрался.
Главный совет: при работе в разных виртуальных средах всегда убедитесь, что ваша версия python одинакова. Я не проверял это изначально, но, поскольку я прыгал туда-сюда, просто решил проверить. Версия python, которую я предполагал, использовалась, не была. Как только я переключился … ага! Лучше.