KurtBestor / Hitomi-Downloader

:cake: Desktop utility to download images/videos/music/text from various websites, and more.
22.39k stars 2.06k forks source link

다운받을떄, 각 파일(문서) 사이에 구분문자나 줄을 넣고 싶습니다. #6045

Open sungwooz opened 1 year ago

sungwooz commented 1 year ago

덕분에 잘 사용하고 있습니다.

특히 북토끼를 잘 이용하고 있습니다.

다만, 게시글들을 받은 후 하나로 합치는 작업 예를 들어 type * > 합친글.txt 등으로 작업할떄, 각 회를 구분 지을 수 없게 붙여 나오는 경우가 많아, 나름 개노가다로 띄어주고 있는데,

각 글 하단 또는 상단에 특수 문자열 (예를 들면 [엔터][엔터]====================================[엔터][엔터] )을 넣을 수 있게 할 수 있을까요?

제가 사용하는 북토끼 스크립트는 아래와 같습니다...

class Image(object): def init(self, src, name): ext = ".{}".format(src.split(".")[-1]) if ext.lower()[1:] not in ["jpg", "jpeg", "bmp", "png", "gif", "webm", "webp"]: ext = ".jpg" self.filename = f"{name}{ext}" self.url = LazyUrl(src, lambda _: src, self)

@Downloader.register class Downloader_Booktoki(Downloader): type = "booktoki" URLS = [r"regex:booktoki[0-9]*.com"] MAX_CORE = 4 icon = "https://booktoki292.com/img/book/favicon-32x32.png"

def read(self):
    soup = get_soup(self.url)

    artist = get_artist(soup)
    title = f"[{artist}] {get_title(soup)}"
    self.artist = artist

    try:
        src = soup.find("div", class_="view-img").find("img")["src"]
        img = Image(src, "cover")
        self.urls.append(img.url)
    except:
        self.print_("No cover -> skip")

    pages = get_pages_list(soup)
    self.print_(pages)
    for n, page in enumerate(pages):
        self.title = f"{title} ({n+1}/{len(pages)})"
        self.print_(f"Reading: {n+1}/{len(pages)}")
        pagesoup = get_soup(page)

        @try_n(4)
        def ctt_foo():
            try:
                return get_content(pagesoup)
            except:
                return get_content(get_soup(page))

        content = ctt_foo()

        f = BytesIO()
        f.write(content.replace(" ", "\n").encode("UTF-8"))
        f.seek(0)

        @try_n(4)
        def fne_foo():
            try:
                return f"{get_page_title(pagesoup)}.txt"
            except:
                return f"{get_page_title(get_soup(page))}.txt"

        self.filenames[f] = fne_foo()
        self.urls.append(f)

    self.title = title

def get_soup(url): html = clf2.solve(url)["html"] return Soup(html)

def get_pages_list(soup): pages_list = [] listbody = soup.find("ul", class="list-body") list_items = list_body.findall("li", class="list-item") for list_item in list_items: page = list_item.find("a")["href"] pages_list.append(page) pages_list.reverse() return pages_list

def get_infolist(soup): """ -> [ title, [ platform, tags, artist ], summary ] """ infobox = soup.find("div", class="col-sm-8") contents = infobox.findall("div", class="view-content") details = contents[1].get_text().split("\xa0") for n, detail in enumerate(details): details[n] = detail.strip() return [contents[0].get_text().strip(), details, contents[2].get_text().strip()]

def get_content(soup): novel = soup.find("div", {"id": "novel_content"}) ps = novel.find_all("p") if len(novel.find_all("p")) != 0: text = "" for n, p in enumerate(ps): if p.get_text() != "": text += p.get_text() else: text += "\n" text += "\n" else: text = novel.get_text() return text

def get_title(soup): return get_info_list(soup)[0]

def get_artist(soup): return get_info_list(soup)[1][2]

def get_pagetitle(soup): full = soup.find("div", class="toon-title") span = full.find("span").get_text() title = full.get_text().replace(span, "").strip() return clean_title(title)

log(f"Site Added: Booktoki")

hyriph commented 1 year ago

이것을 테스트하다: aio_booktoki_v3.hds

sungwooz commented 1 year ago

이것을 테스트하다: aio_booktoki_v3.hds

감동적입니다~~~

너무 잘되요~~~

감사합니다~~~

sungwooz commented 1 year ago

이것을 테스트하다: aio_booktoki_v3.hds

안녕하세요

지난번 북토끼 소설들을 하나로 합치게 하고, 구분지어지는 작업을 만들어 주셔서 잘 사용하고 있었는데, 최근 사이트가 업데이트(아마도 뭔가 소소한)를 하면서 받아지지 않고 있습니다.

스크립 수정 또는 해결방안? 부탁드립니다~~~

북토끼 URL : https://booktoki294.com/novel/8453259 (완결 소설 링크로 바로 연결해봤습니다)