最初は、Plaggerでも使って、DLsite.comのManiaxサイトの一覧を取ってみようかと思ったんですね。
- 活動日誌(2006-09-15) : DLsite.com の新着作品
http://shakenbu.org/yanagi/d/20060915.html#p01
で紹介されているコードの、homeをmaniaxに変えればOKだろ〜と思ったら、うまく行かない。
どうやら、認証ページ(よくある、あなたは18歳以上ですか?って確認を求めるページ)に飛ばされているっぽいんですね。
まぁ、18禁なんだから、しょうがないです。
そこで、CustomFeed::Scriptを使えば何とかなるかな?と思ったんですが、id:charsbar さんから提供していただいているリポジトリ内のPlaggerバージョンでは、どうも入って無さげ。
クッキーを保存する処理でも加えれば、何とかなるのかな?とか思いつつ、小一時間。
…というか、弄っている途中で、自分のやりたい事は「とりあえず http://maniax.dlsite.com/ の新着一覧をゲットしたいだけ」なんだという事を思い出しました。
でまぁ、この程度だったら、Pythonでやっても何とかできるかな?と思い返しまして、Python版のMechanizeを ちょっくら弄ってみました。
#!/bin/env python # -*- encoding: shift-jis -*- """ http://maniax.dlsite.com/new 18禁のDLsite.comにアクセスし、 Plaggerのテキスト形式で結果を出力する。 """ import mechanize import re import sys g_os = sys.stdout def msg_print(url, s): """ ページのデータ(s)を解析し、title,link,summary形式で出力する """ print "parse...", url m = re.search('<TD valign="top" align="left" class="works_name1">(.*?)</TD>', s) print >>g_os, "title:", m.group(1) print " ", m.group(1) print >>g_os, "link:", url m = re.search('::作品内容.*?align="left">(.*?)</TD>.*?</TR>', s, re.S) print >>g_os, "summary:", m.group(1).replace("<br />", "").replace("\r", "") print >>g_os, "" def open_web(br, url): """指定されたURL(url)にアクセスし、製品毎のデータを取得する""" res = br.open(url) s = res.read() msg_print(url, s) def main(): # 出力方向を、ファイルに変更 global g_os g_os = file("DLsite.txt", "w") # ブラウザオブジェクトで URL を開く br = mechanize.Browser() res = br.open('http://maniax.dlsite.com/new') # 18禁ボタンを押す br.select_form(name="adult_check") res = br.submit() assert res.geturl() == "http://maniax.dlsite.com/new" # リンクを列挙 urls = {} for l in br.links(url_regex="work/=/product_id"): print l.url urls[l.url] = "" # リンクを重複排除&ソート ll = urls.keys() ll.sort() for l in ll: print l open_web(br, l) if __name__ == "__main__": ret = main()
こんな作業を何度も繰り返すと、どうしてもPlaggerで省略化したくなりますが、mechanizeの練習にもなったから OKという事で。