Найти - Пользователи
Полная версия: странное поведение библиотеки requests
Начало » Web » странное поведение библиотеки requests
1
freeman86
Доброго времени суток! Обнаружил странную особенность библиотеки requests. Заметил это случайно, когда делал для собственного образования парсер сайта avito с помощью библиотеки bs4. Ниже приведу скриншот. На первом скрине (белый фон) часть странички avito, где выделено два тега <p></p>. Библиотека requests читает эти теги странным образом, выкидывая первый открывающий тэг. Это есть на фтором скриншоте. А далее ошибка тянется в bs4 с соответствующими последствиями.
FishHook
freeman86
Предположу, что requests как раз отдает всё правильно, как и было задумано. Не её задача ковыряться в HTML. Именно так страницу и сверстал её автор. Просто браузер не смог распарсить (ну потому что тут явная ошибка) и попытался ошибку исправить (ковыряться в HTML как раз задача браузера).
py.user.next
Там на фото в бразузере есть “== $0”, а в данных нет этой подстроки. Уверен, что это один и тот же фрагмент изображён?
freeman86
py.user.next
Там на фото в бразузере есть “== $0”, а в данных нет этой подстроки. Уверен, что это один и тот же фрагмент изображён?
Абсолютно уверен. Более того, есть третий вариант этой верстки, если смотреть исходный код, который получает браузер. И там тег <p></p> вовсе не пустой. А так, вы сами можете найти это фрагмент на Авито. Забиваете в поисковой строке любой товар, нажимаете поиск и все товары, которые появятся, будут состоять из блоков. Тот фрагмент, который я показываю, содержит информацию о метро и как давно создано объявление.
bw
requests ничегоне добавляет и не убирает, в отличие от браузера, так свёрстана страница, добро пожаловать в мир рукожопых веб-макак. Попробуй пропустить через lxml, он может исправить эту ситуацию (раз bs не может, и посмотри ещё сам bs, возможно ему можно вкл. дополнительные мозги). Можно так же html5lib посмотреть, он должен быть максимально точным, но медленным. Если скорость не нужна, бери сразу его.

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

..bw
freeman86
bw
requests ничегоне добавляет и не убирает, в отличие от браузера, так свёрстана страница, добро пожаловать в мир рукожопых веб-макак. Попробуй пропустить через lxml, он может исправить эту ситуацию (раз bs не может, и посмотри ещё сам bs, возможно ему можно вкл. дополнительные мозги). Можно так же html5lib посмотреть, он должен быть максимально точным, но медленным. Если скорость не нужна, бери сразу его.Про третий вариант: знаешь что такое JS?..bw
Хотите сказать что они генерируются после того, как requests уже считала страницу?
FishHook
freeman86
Хотите сказать что они генерируются после того, как requests уже считала страницу?
веб-сервер получает запрос и отправляет какой-то ответ. Ответом может быть любой текст. Вот этот текст и получает requests. Этой библиотеке вообще плевать на содержимое. Браузер же работает с HTML и воспринимает собержимое ответа как HTML. После загрузки браузер парсит HTML в DOM и дальше с ним работает. В HTML может быть встроен JS-скрипт, который браузер выполнит после загрузки страницы и соответствующим образом изменит DOM. То что вы видите в отладчике браузера может вовсе не соответствовать тому тексту, который отправил веб-сервер.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB