Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » странное поведение библиотеки requests [RSS Feed]

#1 Дек. 2, 2019 10:06:44

freeman86
Зарегистрирован: 2016-09-22
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

странное поведение библиотеки requests

Доброго времени суток! Обнаружил странную особенность библиотеки requests. Заметил это случайно, когда делал для собственного образования парсер сайта avito с помощью библиотеки bs4. Ниже приведу скриншот. На первом скрине (белый фон) часть странички avito, где выделено два тега <p></p>. Библиотека requests читает эти теги странным образом, выкидывая первый открывающий тэг. Это есть на фтором скриншоте. А далее ошибка тянется в bs4 с соответствующими последствиями.

Отредактировано freeman86 (Дек. 2, 2019 10:07:13)

Прикреплённый файлы:
attachment пример4.jpg (106,2 KБ)

Офлайн

#2 Дек. 3, 2019 10:46:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

странное поведение библиотеки requests

freeman86
Предположу, что requests как раз отдает всё правильно, как и было задумано. Не её задача ковыряться в HTML. Именно так страницу и сверстал её автор. Просто браузер не смог распарсить (ну потому что тут явная ошибка) и попытался ошибку исправить (ковыряться в HTML как раз задача браузера).



Офлайн

#3 Дек. 4, 2019 01:58:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

странное поведение библиотеки requests

Там на фото в бразузере есть “== $0”, а в данных нет этой подстроки. Уверен, что это один и тот же фрагмент изображён?



Офлайн

#4 Дек. 4, 2019 09:38:19

freeman86
Зарегистрирован: 2016-09-22
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

странное поведение библиотеки requests

py.user.next
Там на фото в бразузере есть “== $0”, а в данных нет этой подстроки. Уверен, что это один и тот же фрагмент изображён?
Абсолютно уверен. Более того, есть третий вариант этой верстки, если смотреть исходный код, который получает браузер. И там тег <p></p> вовсе не пустой. А так, вы сами можете найти это фрагмент на Авито. Забиваете в поисковой строке любой товар, нажимаете поиск и все товары, которые появятся, будут состоять из блоков. Тот фрагмент, который я показываю, содержит информацию о метро и как давно создано объявление.

Отредактировано freeman86 (Дек. 4, 2019 09:38:52)

Прикреплённый файлы:
attachment html.jpg (83,0 KБ)

Офлайн

#5 Дек. 5, 2019 06:28:14

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

странное поведение библиотеки requests

requests ничегоне добавляет и не убирает, в отличие от браузера, так свёрстана страница, добро пожаловать в мир рукожопых веб-макак. Попробуй пропустить через lxml, он может исправить эту ситуацию (раз bs не может, и посмотри ещё сам bs, возможно ему можно вкл. дополнительные мозги). Можно так же html5lib посмотреть, он должен быть максимально точным, но медленным. Если скорость не нужна, бери сразу его.

Про третий вариант: знаешь что такое JS?

..bw



Офлайн

#6 Дек. 6, 2019 10:16:29

freeman86
Зарегистрирован: 2016-09-22
Сообщения: 11
Репутация: +  0  -
Профиль   Отправить e-mail  

странное поведение библиотеки requests

bw
requests ничегоне добавляет и не убирает, в отличие от браузера, так свёрстана страница, добро пожаловать в мир рукожопых веб-макак. Попробуй пропустить через lxml, он может исправить эту ситуацию (раз bs не может, и посмотри ещё сам bs, возможно ему можно вкл. дополнительные мозги). Можно так же html5lib посмотреть, он должен быть максимально точным, но медленным. Если скорость не нужна, бери сразу его.Про третий вариант: знаешь что такое JS?..bw
Хотите сказать что они генерируются после того, как requests уже считала страницу?

Офлайн

#7 Дек. 6, 2019 15:45:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

странное поведение библиотеки requests

freeman86
Хотите сказать что они генерируются после того, как requests уже считала страницу?
веб-сервер получает запрос и отправляет какой-то ответ. Ответом может быть любой текст. Вот этот текст и получает requests. Этой библиотеке вообще плевать на содержимое. Браузер же работает с HTML и воспринимает собержимое ответа как HTML. После загрузки браузер парсит HTML в DOM и дальше с ним работает. В HTML может быть встроен JS-скрипт, который браузер выполнит после загрузки страницы и соответствующим образом изменит DOM. То что вы видите в отладчике браузера может вовсе не соответствовать тому тексту, который отправил веб-сервер.



Офлайн

  • Начало
  • » Web
  • » странное поведение библиотеки requests[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version