🌋

マンガサイトにつひての色々な事情を看る

2021/07/06に公開

漫画サイト。
それは漫画がブラウザで読める web サイトのことである。

漫画サイトには大きく分けて二種類ある。一方が違法サイトで、もう一方が合法サイトである。
仕組みは表面上はどちらもよく似ている。内部的には違うが、目的が違うので手段が違うと言っていいだろうが、大まかには同じようなものだ。

ここでは、違法サイトについて調べてみたい。

まず、あるひとつの違法サイトでのコンテンツの総数を数えてみたい。
現段階で、数え上げたのは 51717 のタイトル数だった。これは全てがコミックの 1 巻分ではなくて、第何話や、週刊誌の第何号というものを含めての数で、プラスこの数の 20% 分くらいがまだ隠れ層になっていて表出していない。そしてコンテンツは日々、運営者によって更新されるので、時間とともに数は増えていく。

隠れ層 . . . これはどう云うことかというと、今回とった手法が関係しているが、例えば 100 回ランダムに違法サイトのページアドレスを出して、データベースに記録するということを繰り返して、次回はデータベースに記録されているもの以外をデータベースに記録していくようにしたとして、100 回のうち 20 回ほどが、記録されてないアドレスになってきた場合、続けていくと100 回のうち 15 、10 、5 とだんだんと記録されていないアドレスがランダムでは出にくくなっていくことになる。
このことをここで、隠れ層と云った。隠れ層とは云わないのかもしれない、全部ではないということ。隠れ層を見つけ出すという目的ではなく[1]、ある時点の表出しているコンテンツのメタ情報について考察していく。

前提

あくまでも、違法サイトのコンテンツページのアドレスを前もって知っているわけではなく、ページにあるマンガ画像が表示されない方法で、ダウンロードせずにコンテンツが埋め込まれている URL を収集して、漫画のタイトルや著者情報を分析していくというパズルであり、漫画読みたいということではない。
読みたい場合は、まずは合法マンガサイトを掘り進んで潜り込んでみるといい。
どの漫画家が作品を何点公開しているのかなど並べて見るプログラムを考えて書いてみるなどすると、方法などが見えてくる。

🍄

YouTubeのvideoIDが不正ですhttps://www.youtube.com/embed/FvzrkW8FkIs

マンガサイトにつひて

<a href="https://qiita.com/dauuricus/private/a50b6fde168bd8496439">private ⌨</a>

author, title

require 'open-uri'
require 'nokogiri'
require 'time'

address = 'https://www.mangaz.com/authors/list'
html = URI.open(address)
doc = Nokogiri::HTML(html)

mangaka ={}
count = 1

(16..794).each do |num|
    a_tag = doc.xpath('//a')[num]
    if a_tag.inner_text == 'ページの上部に戻る'
        next
    end

    count += 1
    author_profile_page = 'https://mangaz.com' + a_tag[:href].to_s
    author_name = a_tag.inner_text
    mangaka.store(author_name,author_profile_page)
end

total_titles = 0
manga = []
count = 0

mangaka.each do |key,value|
    html = URI.open(value)
    doc = Nokogiri::HTML(html)
    h4 = doc.css('h4')
    total_titles += h4.size
    a = doc.xpath('//h4/a')
    a.each do |atag|
        item_name = atag.inner_text
        item_url = atag['href']
        manga[count] = {'title' => item_name,
                        'book_profile_page' => item_url,
                        'author' => key,
                        'author_profile_page' => value
                        }
        count += 1

    end
    sleep 1
end

temp = ''
r18 =''
count = 0

manga.each_with_index do |data,index|
    if temp == data['author'] then
        count += 1
    else
        puts
        count = 1
    end
    if data['book_profile_page'].match("\/r18.")
        r18 = ' -R18- '
    else
        r18 =''
    end

    print index + 1, " #{r18} ",data['author'],"  #{count}  " ,data['title']
    puts
    temp = data['author']
    sleep 0.2
end

author, title, tag

temp = ''
r18 =''
count = 0

manga.each_with_index do |data,index|
    if temp == data['author'] then
        count += 1
    else
        puts
        count = 1
    end
    if data['book_profile_page'].match("\/r18.")
        r18 = ' -R18- '
    else
        r18 =''
    end

    $stdout = File.open("mangaz.txt", "a+") # STDOUT
    print index + 1, " #{r18} ",data['author'],"  #{count}  " ,data['title']
    puts

    value = data['book_profile_page']
    html = URI.open(value)
    doc = Nokogiri::HTML(html)
    atag = doc.css('.tag > a')
    puts
    atag.each do |tag|
        print '   -tag-   ', tag.inner_text
        puts
    end
    puts
    $stdout = STDOUT

    temp = data['author']
    #sleep 0.2
end

この記事は、Ruby 、 SQLite3 、 スクレイピング、正規表現についての考察という範囲で、超ビギナー向けである。この範囲での経験がどれも 1 ヶ月以内の未熟者が書いているので、それ以上の内容であることはありえない。
フレームワークとは無縁。

スタンスとしては出版社よりは、マンガ家個人に寄りそう。データを明瞭にオープンに出したい。
このスタンスにおいては漫画家に不利益になることには言及しない。

つづく ... マンガサイトにつひての色々な事情 02

関連記事

https://zenn.dev/kurocat/articles/eb233dc31bb285

https://qiita.com/dauuricus/items/563cbcc9776f66cb672e

https://zenn.dev/kurocat/articles/55565f019754cb

脚注
  1. それもパズルなり。 ↩︎

Discussion