マンガサイトにつひての色々な事情を看る
序
漫画サイト。
それは漫画がブラウザで読める web サイトのことである。
漫画サイトには大きく分けて二種類ある。一方が違法サイトで、もう一方が合法サイトである。
仕組みは表面上はどちらもよく似ている。内部的には違うが、目的が違うので手段が違うと言っていいだろうが、大まかには同じようなものだ。
ここでは、違法サイトについて調べてみたい。
まず、あるひとつの違法サイトでのコンテンツの総数を数えてみたい。
現段階で、数え上げたのは 51717 のタイトル数だった。これは全てがコミックの 1 巻分ではなくて、第何話や、週刊誌の第何号というものを含めての数で、プラスこの数の 20% 分くらいがまだ隠れ層になっていて表出していない。そしてコンテンツは日々、運営者によって更新されるので、時間とともに数は増えていく。
隠れ層 . . . これはどう云うことかというと、今回とった手法が関係しているが、例えば 100 回ランダムに違法サイトのページアドレスを出して、データベースに記録するということを繰り返して、次回はデータベースに記録されているもの以外をデータベースに記録していくようにしたとして、100 回のうち 20 回ほどが、記録されてないアドレスになってきた場合、続けていくと100 回のうち 15 、10 、5 とだんだんと記録されていないアドレスがランダムでは出にくくなっていくことになる。
このことをここで、隠れ層と云った。隠れ層とは云わないのかもしれない、全部ではないということ。隠れ層を見つけ出すという目的ではなく[1]、ある時点の表出しているコンテンツのメタ情報について考察していく。
前提
あくまでも、違法サイトのコンテンツページのアドレスを前もって知っているわけではなく、ページにあるマンガ画像が表示されない方法で、ダウンロードせずにコンテンツが埋め込まれている URL を収集して、漫画のタイトルや著者情報を分析していくというパズルであり、漫画読みたいということではない。
読みたい場合は、まずは合法マンガサイトを掘り進んで潜り込んでみるといい。
どの漫画家が作品を何点公開しているのかなど並べて見るプログラムを考えて書いてみるなどすると、方法などが見えてくる。
🍄
YouTubeのvideoIDが不正です
マンガサイトにつひて
<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
関連記事
-
それもパズルなり。 ↩︎
Discussion