Проблема в том, что некоторые изображения добавляются в DOM через Javascript после загрузки страницы.Таким образом,
res = requests.get(comicUrl)
получает HTML и DOM, прежде чем какие-либо изменения будут сделаны javascript.Вот почему
soup = bs4.BeautifulSoup(res.text, 'html.parser')
comicElem = soup.find_all(class_="PB0mN")
len(comicElem) # = 5
находит только 5 изображений.
Если вы хотите получить все загруженные изображения, вы не можете использовать библиотеку запросов.Вот пример использования селена:
from selenium import webdriver
browser = webdriver.Chrome('/Users/glenn/Downloads/chromedriver')
comicUrl = "https://mangapanda.onl/chapter/naruto_107/chapter-700.5"
browser.get(comicUrl)
images = browser.find_elements_by_class_name("PB0mN")
for image in images:
print(image.get_attribute('src'))
len(images) # = 18 images
См. Этот пост для получения дополнительных ресурсов по очистке страниц javascript: Скрипт веб-страницы JavaScript с Python
Относительно того, как сказатьесли HTML изменяется с помощью JavaScript?
У меня нет жестких правил, но вы можете выполнить следующие следственные действия:
Как вы заметили, только 5 изображений первоначально были отправлены с запросами, но было видно, что на странице больше изображений.является первым признаком того, что DOM изменяется после загрузки.
Второй шаг: с помощью браузера Developer Tools -> Scripts вы можете увидеть несколько файлов javascript, связанных со страницей.Обратите внимание, что не все javascript изменяют DOM, поэтому наличие этих сценариев не обязательно означает, что они изменяют DOM.
Для дальнейшей проверки DOM изменяется после загрузки страницы:
Скопируйте html из Developer Tools -> View Source Source в инструмент форматирования HTML, такой как http://htmlformatter.com,, отформатируйте html и посмотрите на количество строк.Инструменты разработчика -> Просмотр страницы источника - это HTML-код, отправляемый сервером без каких-либо изменений.
Затем скопируйте HTML-код из Инструменты разработчика -> Элементы (обязательно получите все из <html>...</html>
)и скопируйте его в инструмент форматирования HTML, например http://htmlformatter.com,, и посмотрите на количество строк.Инструменты разработчика -> Элементы HTML - это полный, модифицированный DOM.
Если количество строк значительно отличается, то вы знаете, что DOM изменяется после загрузки.
Сравнение количества строк для "https://mangapanda.onl/chapter/naruto_107/chapter-700.5" показывает 479 строк для исходного htmlи 3245 строк для полного DOM, так что вы знаете, что что-то модифицирует DOM после загрузки страницы.