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

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

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

先把js文件抓下来:

import urllib str = urllib.urlopen('http://hotpic.sfacg.com/Utility/4/523.js').read() str = urllib.quote(str).replace("/n", " ").replace("%20", " ").replace("%22", "/"").replace("%3A", ":").replace("%3B", ";").replace("%3D", "=") print str

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

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

import re count = 1 for m in re.finditer(r'/"(http:[//w/.]+png)/"', str):print "url: ", m.group(1)print "end url/n"url = m.group(1)path = r"/Users/Pope/Desktop/%d.png" % count count += 1data = urllib.urlretrieve(url,path)

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

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

Python正则表达式

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

import re

常用的函数有这么几个:

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

>>> re.match("c", "abcdef") # No match >>> re.search("c", "abcdef") # Match <_sre.SRE_Match object at ...>

  • split()

>>> re.split('/W+', 'Words, words, words.') ['Words', 'words', 'words', '']

  • findall()和finditer()

>>> re.findall("(/w+)", "Pope is a dog.") ['Pope', 'is', 'a', 'dog']

>>> for m in re.finditer("(/w+)", "Pope is a dog."): ... print m.group() ... Pope is a dog

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

>>> re.sub(r"(/w+)", r"@/1@","Pope is a dog.") '@Pope@ @is@ @a@ @dog@.'

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

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

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

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

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

完整代码:

import urllibone_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" % countcount += 1data = 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抓漫画相关推荐

  1. 漫画算法python版下载_用 Python 下载漫画

    ReLIFE 1. 开篇 前一阵子看了 Relife 这部七月番动画,短短 13 集很快就看完,深深无法自拔,然后去查了下,发现原来是改编自漫画的,于是立马去找漫画的资源,但是搜来搜去都没有找到资源下 ...

  2. 看漫画学python下载_用 Python 下载漫画

    ReLIFE 1. 开篇 前一阵子看了 Relife 这部七月番动画,短短 13 集很快就看完,深深无法自拔,然后去查了下,发现原来是改编自漫画的,于是立马去找漫画的资源,但是搜来搜去都没有找到资源下 ...

  3. python代码案例详解-我用Python抓取了7000 多本电子书案例详解

    安装 安装很简单,只要执行: pip install requests-html 就可以了. 分析页面结构 通过浏览器审查元素可以发现这个电子书网站是用 WordPress 搭建的,首页列表元素很简单 ...

  4. python抓取头条文章

    python抓取头条美文并存储到mongodb # Author:song from multiprocessing import Pool from urllib.parse import urle ...

  5. 微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”...

    微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友 ...

  6. python爬虫保存图片到指定文件夹_李亚涛:python抓取某房源户型图并自动保存到文件夹...

    大家好,今天来给大家分享一下如何抓取某房产网站房源户型图的所有图片,而且自动以房源名称命名一个文件夹,把所有图片放到文件夹中. 大概的思路是: 1.获取网页源代码 2.获取图片地址与房源名称 3.在当 ...

  7. blob的真实地址怎么获得_使用Python抓取m3u8加密视频 续:获得index.m3u8 地址

    之前写<使用Python抓取m3u8加密视频>笔记的原因,是自己有几个视频想保存,但对于m3u8, .ts 文件拼接不熟悉,就尝试写个脚本练手. 今天看了回复,有同学想知道如何从视频网站上 ...

  8. python 抓取的网页默认是bytes的,要转码

    python 抓取的网页默认是bytes的,要转码. 查看网页源码可以看到,我本次抓取的网页的编码方式是utf-8的. req = urllib.request.Request(url=myurl,h ...

  9. python 抓取网页链接_从Python中的网页抓取链接

    python 抓取网页链接 Prerequisite: 先决条件: Urllib3: It is a powerful, sanity-friendly HTTP client for Python ...

最新文章

  1. matlab graphminspantree
  2. 文件操作工具类FileUtil
  3. LeetCode-39. 组合总和 I
  4. 高级灰rgb数值_插画的高级感,从何而来?
  5. php用户名框架,ThinkPHP框架结合Ajax实现用户名校验功能示例
  6. Lambda表达式基础
  7. php gd 缩小,php 使用GD缩小图片,使用透明格式就失真
  8. 如何让你的app在后台被干掉后优雅的启动。
  9. 7.2判断是否手机端进行访问页面
  10. jy-09-SERVLETJSP——Servlet-Cookie-Session
  11. java电话号码_java编程——电话号码查询系统
  12. 什么是内存泄露?该怎么排查?Java内存泄漏策略
  13. Remote 激光微粒计数器参数是什么
  14. Spring Boot 升级所遇到的坑们s 1.5.x升级到2.1.x
  15. GD32汽车诊断KWP 协议/ ISO-14230测试
  16. BC5-MM、CSR867x的DFU更新流程之二:dfu文件转bin文件
  17. 南航大二学生两年手搓火箭成功发射,全靠业余时间上网自学,稚晖君点赞
  18. 爱情保卫战经典语录全集
  19. 高通骁龙835无线充电手机_高通的快速充电5可以在15分钟内为手机充电
  20. 服务器蓝屏显示7f,电脑蓝屏代码7f该怎么解决

热门文章

  1. 分享链接内容到Facebook和twitter
  2. HBase2.x(五)HBase API DDL的操作
  3. instagram架构设计_在Photoshop中设计基于Instagram的简单作品集
  4. 关于学习------听米老师的一堂课有感
  5. php 正则去除空格,php 正则去掉
  6. ChatGPT 引领的 AI 革命爆发了,一起上车吧!
  7. 在SEO中如何计算网页的价值呢?
  8. 超详细的抖音全攻略-运营篇
  9. Excel批量插入多个空白行(列)-Python实现(openpyxl库)
  10. Vue 绑定使用 touchstart touchmove touchend