Столкнулся с проблемой, пытаюсь спарсить с mangalib.me мангу, но в определённый момент программа начинает вечно ожидать ответа от запроса. Заранее прошу прощения за крайне плохо написанный код и за километровые манипуляции со строками.
Не знаю в чём именно ошибка поэтому вот полный код.
import requests
import os
from bs4 import BeautifulSoup
def ISO_8859_1(txt):
txt = '\\x'.join(txt.split('%'))
return eval(f"bytes('{txt}','iso-8859-1').decode('utf-8')")
#Запрашивает мангу
def RequestMangas(session, settings, headers):
reaspons = session.post("https://mangalib.me/api/list", headers=headers, json=settings)
return reaspons
debug = True
#создаёт сессию
sess = requests.Session()
reaspons = sess.get("https://mangalib.me/manga-list?types[]=1").text
#XSRF, CSRF токены чтобы сайт не блокировал запросы
XSRF = sess.cookies['XSRF-TOKEN']
CSRF = reaspons.split('<meta name="_token" content="')[1].split('">')[0]
headers = {
'X-CSRF-TOKEN': CSRF,
'X-XSRF-TOKEN': XSRF
}
#Настройки для парсинга манги
settings = {
"sort": "rate",
"dir": "desc",
"page": 1,
"types": [
"1"
],
"site_id": "1",
"type": "manga",
"caution_list": [
"Отсутствует",
"16+",
"18+"
]
}
black_list = [
'toukyou-revengers'
]
reaspons = RequestMangas(sess, settings, headers)
data = eval('None'.join(reaspons.text.split('null')))['items']['data']
#https://img33.imgslib.link//manga/ijiranaide-nagatoro-san/chapters/1-1/plsnaga_ch1_02.png
d = [{'slug':'ijiranaide-nagatoro-san'}]
for i in data:
cur_slug = i['slug']
if cur_slug in black_list:
continue
href = 'https://mangalib.me/'+i['slug']
href = str(BeautifulSoup(sess.get(href).text, "html.parser").find('a', attrs = {'class': 'button button_block button_primary'})).split('href="')[1].split('">')[0]
DATA = eval('True'.join('False'.join(('None'.join(sess.get(href).text.split('window.__DATA__ = ')[1].split('window.__info')[0].strip()[:-1].split('null')).split('false'))).split('true')))
if not os.path.isdir(f'manga/{cur_slug}'):
os.mkdir(f'manga/{cur_slug}')
for info_of_chapters in reversed(DATA['chapters']):
if debug:
print('go to next chapter or volume: ', href)
reaspons = sess.get(href).text
soup = BeautifulSoup(reaspons, "html.parser")
volume = info_of_chapters['chapter_volume']
chapter = info_of_chapters['chapter_number']
slug = info_of_chapters['chapter_slug']
pages = soup.find('script', attrs={'id': 'pg'}).text[27:].split(";")[0]
pages=eval(pages)
if not os.path.isdir(f'manga/{cur_slug}/{volume}-{chapter}'):
os.mkdir(f'manga/{cur_slug}/{volume}-{chapter}')
for j in pages:
page_href = f"https://img33.imgslib.link//manga/{i['slug']}/chapters/{slug}/{j['u']}"
if debug:
print(j['p'], page_href)
try:
photo = requests.get(page_href).content
folder = f'manga/{cur_slug}/{volume}-{chapter}/page_{j["p"]}.png'
except Exception:
continue
with open(folder, 'wb') as f:
if debug:
print('Creating file: ' + folder)
f.write(photo)
#break
href = str(soup.findAll('a', attrs={'class': 'reader-header-action reader-header-action_icon'})[1]).split('href="')[1].split('">')[0]