Элемент HTML <script>
используется для встраивания или ссылки на исполняемый код; это обычно используется для встраивания или ссылки на код JavaScript.
Страница, которую вы обрабатываете, отображается с помощью JavaScript, исходный HTML-код содержит тег <script>
с переменной images
, который содержит URL-адреса всех изображений. Вы можете либо использовать подход Ракеша для извлечения объекта JavaScript, содержащего URL-адреса с регулярными выражениями , либо использовать Requests-HTML
, который использует Chromium для визуализации сайта как оно появляется в браузере.
Вы можете получить все URL с кодом ниже:
from requests_html import HTMLSession
session = HTMLSession()
url = 'https://bato.to/chapter/1204541'
r = session.get(url)
r.html.render()
urls = [img.attrs['src'] for img in r.html.find('.item > img')]
>>> urls
['https://file-comic-99.anyacg.co/uploads/5ae318893532c3405bd86baa/57a04a3ce55bd48debf0a486a4c1a48f6380ef9b_1066291_800_1138.png',
'https://file-comic-99.anyacg.co/uploads/5ae318893532c3405bd86baa/a0f75d10919430e6ef25a86c3dcc65f343d8e319_518773_800_1138.png',
'https://file-comic-99.anyacg.co/uploads/5ae318893532c3405bd86baa/575d00ff9ef6873ee9ecfb418e360fe72cc1c594_418309_800_1138.png',
...
]
>>> len(urls)
59
Проблема этого решения в том, что для его выполнения требуется много времени.
Для пояснения, .item > img
предназначается для всех элементов img
, которые являются прямыми потомками элемента класса item
.
Вы можете прочитать больше о CSS селекторах здесь .
Вы также можете использовать Selenium
:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get(url)
url_dict = browser.execute_script('return images;')
browser.quit()
>>> url_dict['1']
'https://file-comic-99.anyacg.co/uploads/5ae318893532c3405bd86baa/57a04a3ce55bd48debf0a486a4c1a48f6380ef9b_1066291_800_1138.png'