用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()


Python爬虫:用Scrapy框架爬取漫画

本篇文章,通过 scrapy 框架来实现相同的功能。scrapy 是一个为了爬取网站数据,提取结构性数据而编写的应用框架。关于框架使用的更多详情可浏览官方文档,本篇文章展示的是爬取漫画图片的大体实现过...
  • python233
  • python233
  • 2017年04月27日 22:16
  • 454

python下载漫画

下载漫画的脚本身为漫画迷,一直想直接将漫画下载到电脑上看,于是就有这个python脚本。系统:Ubuntu 14.04 python版本:2.7.6 用到的python库有: os (操作系统接口...
  • Cceking
  • Cceking
  • 2016年07月26日 23:09
  • 447

漫画爬虫的一个小小的例子

逢年过节胖三斤,技术手法退十年。- - 差不多一个多月没碰博客了,都快要没手感了。 说一下前一段时间玩爬虫的时候作死的一个小例子吧。大概的描述就是闲的没事做,去爬了一个漫画网站,想着成功了去装个逼。...
  • ZTZY520
  • ZTZY520
  • 2017年02月23日 17:51
  • 476

python为在线漫画网站自制非官方API(未完待续)

接下来将记录我一步一步写一个非官方API的过程,因为一些条件的约束,最后的成品可能很粗暴简陋 现在介绍要准备的所有工具: 系统:ubuntu 14.04 语言:python 2.7 需要自行安装的库:...
  • u013055678
  • u013055678
  • 2015年07月04日 19:01
  • 10097

漫吧漫画阅读界面的搭建(一)基础布局搭建(完全代码)

第一篇链接 漫吧漫画阅读界面的搭建(一)基础布局搭建(上) 第二篇链接漫吧漫画阅读界面的搭建(一)基础布局搭建(下) 这一篇是完整代码的展示,博文是前两篇 方便起见,代码为一个文件 布局代码: 主布局...
  • qq_21265915
  • qq_21265915
  • 2017年03月14日 13:41
  • 866

漫画怎么画?用什么数位板好?

漫画怎么画?用什么数位板好?数位板推荐绘王的,下面给大家讲解一下关于漫画的基础画法和技巧。 首先了解画漫画的工具,目前用电脑绘制卡通漫画大致有两种方法。 一种方法是先用传统工具手绘,然后用扫描仪扫描...
  • jihan1987
  • jihan1987
  • 2017年04月11日 11:31
  • 439

java爬虫系列(三)——漫画网站爬取实战

项目地址 数据库设计 ORM框架 代理浏览器 实战目标 代码解读 comouyangcrawlersManhua start chapterBean contentBean 实测 启动se...
  • Mr_OOO
  • Mr_OOO
  • 2018年01月06日 18:21
  • 295

漫吧漫画阅读界面的搭建(一)基础布局搭建(上)

先上界面的效果图:(图片质量有点差,这是因为质量好老是会超过大小限制,请谅解) 一、首先我们来实现基本的图片显示部分 这里想法是这样的,实现方式多样 1.可以通过ViewPager控件然后加载Fr...
  • qq_21265915
  • qq_21265915
  • 2017年03月14日 12:17
  • 882

人脸识别以及漫画效果处理

人脸识别以及图像处理软件简要说明 点击“人脸检测图标”,进入软件主界面如下: 程序中内置了一张测试图像,也可以加载手机中存储的人脸图像。下面简单介绍下软件功能; (1)通过调节羽化按钮,可以...
  • guang09080908
  • guang09080908
  • 2014年11月23日 07:17
  • 2442

手把手教你用python抓网页数据

前言: 数据科学越来越火了,网页是数据很大的一个来源。最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,python)都可以实现抓网页数据,甚至很多统计\计算的语言(R,Mat...
  • u013938528
  • u013938528
  • 2014年09月30日 19:55
  • 3665
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Python抓漫画
举报原因:
原因补充:

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