用Python抓漫画

原创 2011年01月21日 22:26:00

我现在只追海贼王、火影、死神这三部漫画,一般在SF在线漫画上看。这地方的好处就是看漫画的时候点一下图片就会翻下一页,不像有些文章非要点“下一页”,还整得贼小,周围都是广告。但有时加载图片会发生错误,显示一半就罢工了,无论你怎么刷新都没用。

今天看漫画的时候(一般是周四更新)突然想何不把漫画抓下来看呢。于是,我看了一下网页源码,发现它每张图片会附带一个随机数,猜都没得猜,比如,火影第524话的第1页http://hotpic.sfacg.com/Pic/OnlineComic1/Naruto/524/001_3760.png。没办法,继续看源码。居然发现有个js文件包含了这一话所有图片的网址兴奋

接下来的问题是一个古老的问题,用什么语言呢?我决定尝尝鲜,Python吧,不说它擅长网络事务么。搜了一下,决定用urllib库

先把js文件抓下来:

 

解释一下,由于是js文件,而且有中文编码,所以用quote()先编个码。这时,汉字不管它,但有些符号也跟着变了,比如,空格是“%20”,冒号是“%3A”,……,详见

下面是把url指向的图片抓下来(暂时放桌面吧):

 

这里多亏了urlretrieve(url, filename)老兄,它负责把url所指的东西抓下来写进filename里。

顺便复习一下正则表达式:

PythonPython正则表达式

Python的正则表达式模块叫re。

 

常用的函数有这么几个:

  • match()和search(),功能类似,但match()只从头匹配,而search()则可以匹配任意位置。

 

  • split()

 

  • findall()和finditer()

 

 

  • sub(patternreplstring),把string中所有匹配pattern的子串全部替换为repl。

 

  • group(), start(), end(), span():用于查询匹配结果,group()返回被匹配的字串,start()和end()分别返回匹配的开始和结束位置,span()返回一个元组(开始位置,结束位置)

详见官方说明Python正则表达式操作指南

火影

P.S. 有个哥们写了个比较详细的urllib介绍

P.P.S. Mac上看漫画推荐Simple ComicSimple Comic,可以直接看压缩文件。所以,最好把下载下来的png图片打个包:

 

完整代码:

import urllib

one_piece_url = "http://hotpic.sfacg.com/Utility/2/"
n = "640"
comic_url = one_piece
comic_name = "OnePiece"

str = urllib.urlopen(comic_url + n + ".js").read()
url_encoding = [["\n", " "], ["%20", " "], ["%22", '"'], ["%3A", ":"], ["%3B", ";"], ["%3D", "="], ["%5B", "["], ["%5D", "]"]]
pages = urllib.quote(str)
for pair in url_encoding:
    pages = pages.replace(pair[0], pair[1])
print "js: " + pages
print "end js\n"

import re
count = 1
for m in re.finditer(r'(http:[\w./]+.png)', pages):
    print "url: ", m.group(1)
    print "end url\n"

    url = m.group(1)
    path = r"/Users/Pope/Desktop/%d.png" % count
    count += 1
    data = urllib.urlretrieve(url,path)

import zipfile
import glob
import os
directory = "/Users/Pope/Desktop/"
f = zipfile.ZipFile( directory + comic_name + n + '.zip', 'w' )
for img in glob.glob( os.path.join( directory, '*.png' ) ):
    f.write( img )
    os.remove( img )
f.close()


完整的十字架(漫画)

每个人都背负着一个沉重的十字架,在缓慢而艰难地朝着目的地前进。途中,有一个人忽然停了下来。他心想:这个十字架实在是太沉重了,就这样背着它,得走到何年何月啊?!于是,他拿出刀,作出了一个惊人的决定:他决...

漫画赏析:Linux 内核到底长啥样

今天,我来为大家解读一幅来自 TurnOff.us 的漫画 “InSide The Linux Kernel” 。 TurnOff.us 是一个极客漫画网站,作者Daniel Stori 画了...

使用WebMagic爬虫框架爬取暴走漫画

WebMagic是黄亿华先生开发的一款java轻量级爬虫框架。我之所以选择WebMagic,因为它非常轻量级,可以学习爬虫的原理,而且用WebMagic非常容易进行功能扩展。也许你会听过另一个爬虫框架...

大剑漫画下载[CLAYMORE]

大剑漫画下载[CLAYMORE] 下载地址:http://dl.dbank.com/c0szkh17wz#       第1卷:银眼的斩杀...

Python+BeautifulSoup抓取暴走漫画页面图片

使用Python中的BeautifulSoup(bs4)包抓取暴走漫画网站中的热门帖子中的图片。 首先附上参考资料,之前在OSC上有人写了个抓取豆瓣妹子图片的帖子,参考人家的代码,自己重新弄了一下,当...

图像滤镜艺术---漫画滤镜

漫画滤镜 所谓漫画滤镜就是通过复杂的算法来模拟漫画的特点,从而使真实照片呈现出漫画的风格。要实现漫画的效果,首先要了解漫画的特点,漫画具有几个比较明显的特点如下: 1,颜色泛用 漫画中,使用的颜...

网页端免费看腾讯vip付费漫画

网页端免费看腾讯vip付费漫画 1.安装插件   chrome内核的浏览器(360、猎豹)安装插件即可。   将插件拖入浏览器页面中即可安装。   插件地址:链接: http://pan.baidu....

25个最佳程序员漫画

不少来自www.xkcd.com网站和Dilbert。有些要看懂不容易呢。周末了,大家轻松一下吧。 1. 妈妈搞破坏  2. 给我做份三明治。看懂的举手  3. 代码还在编译呢  4. 软件需求 更多...

Selenium实例2-截图爬取漫画

整体思路分三步: 模拟浏览器–>截取浏览器当前屏幕–>保存漫画截图 目标网址 http://www.1kkk.com/ch1000-514226/(1)获取浏览器(模拟浏览器)def getBr...
  • Co_zy
  • Co_zy
  • 2017年08月17日 17:16
  • 144
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Python抓漫画
举报原因:
原因补充:

(最多只允许输入30个字)