Python показывает другое представление контента, чем веб-браузер

У меня есть сценарий обновления инвентаризации Python, который запускается каждую ночь, извлекая инвентарь с веб-сайта. Недавно у меня начались проблемы, и после дальнейшего расследования я обнаружил, что когда я просматриваю исходный контент через веб-браузер (просмотр исходного кода), он выглядит нормально. Однако, когда я печатаю его на консоли с помощью 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   '   &gt;   B   a   t   h   r   o   o   m   /   a   &gt;   
   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   '   &gt;   
   l   i       c   l   a   s   s   =   '   v   n   a   v   _   _   i   t   e   m   '   &gt;   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   '   &gt;   B   a   t   h   r   o   o   m       M   i   r   r   o   r   s   /   a   &gt;   
   /   l   i   &gt;   l   i       c   l   a   s   s   =   '   v   n   a   v   _   _   i   t   e   m   '   &gt;   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   '   &gt;   B   a   t   h   r       o   m       S   i   n   k   s   /   a   &gt;   
   /   l   i   &gt;   l   i       c   l   a   s   s   =   '   v   n   a   v   _   _   i   t   e   m   '   &gt;   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   '   &gt;   B   a       h   r   o   o   m       C   a   b   i   n   e   t   s   /   a   &gt;   
   /   l   i   &gt;   l   i       c   l   a   s   s   =   '   v   n   a   v   _   _   i   t   e   m   '   &gt;   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   '   &gt;   B   a       h   r   o   o   m       V   a   n   i   t   i   e   s   /   a   &gt;   
   /   l   i   &gt;   l   i       c   l   a   s   s   =   '   v   n   a   v   _   _   i   t   e   m   '   &gt;   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   '   &gt;   L   a   u   n       r   y       H   a   m   p   e   r   s   /   a   &gt;   
   /   l   i   &gt;   l   i       c   l   a   s   s   =   '   v   n   a   v   _   _   i   t   e   m   '   &gt;   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   '   &gt;   B   a   t   h       T   o   w   e   l       S   e   t   s   /   a   &gt;   
   /   l   i   &gt;   l   i       c   l   a   s   s   =   '   v   n   a   v   _   _   i   t   e   m   '   &gt;   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   '   &gt;   S   h   o   w   e           C   u   r   t   a   i   n   s   /   a   &gt;   
   /   l   i   &gt;   /   u   l   &gt;

Тип содержимого — «текст/html», а кодировка — «ISO-8859-1» в веб-браузере, но при печати через Python отображается «UTF-8». Кроме того, в консоли Python print() весь оставшийся HTML-код отображается со всеми пробелами и символами, за исключением правого конца, который возвращается к нормальному состоянию (за исключением того, что он выглядит так, как будто есть 2 тега, что является другой вопрос):

 /   b   o   d   y   &gt;   
   /   h   t   m   l   &gt;   
</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

person Deuce    schedule 08.04.2019    source источник


Ответы (1)


Ничего себе, разобрался.

Главный совет: при работе в разных VirtualEnvs всегда убедитесь, что ваша версия Python одинакова. Я не проверял это изначально, но, прыгая туда-сюда, просто решил проверить. Версия Python, которую я предполагал, использовалась, не была. Как только я переключился... ага! Лучше.

person Deuce    schedule 08.04.2019