@anitop31

При парсинге манги с сайта на определённой фотографии запрос зависает, что делать?

Столкнулся с проблемой, пытаюсь спарсить с 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]
  • Вопрос задан
  • 1144 просмотра
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Вот тут пишут как поставить таймаут. По дефолту может быть 30 секунд стоит а ты сделай 3 или 5 секунд

https://stackoverflow.com/questions/21965484/timeo...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 05:21
2000 руб./за проект
28 нояб. 2024, в 05:18
500 руб./за проект
28 нояб. 2024, в 03:51
3500 руб./за проект