pixivCrawler — Pixiv排行榜图片下载器
一个用Python写的Pixiv排行榜图片下载器,基本上有了她以后,你就能明白为什么店长的新番扫雷总是一堆高质量的配图以及为什么有些死宅的桌面总是那么触及心灵。
原是好友NStal的点子,这家伙野心很大,除了实现功能以外还正在BeautifulSoup的基础上写一个类似jQuery的页面爬取器。我作为一个Python初心者,我还是安心发明轮子好了。
说明:
- 当然你需要先有Python和wget。
- 然后下载Beautiful Soup,并将BeautifulSoup.py与pixivCrawler.py置于相同目录下。
- 默认的保存位置是Windows的D:\pixiv,可以在代码第4行修改,修改时请注意格式(类似F:\Pictures\pixiv,不要在最后加 \)。
- 运行后会在上面的文件夹内生成monthly、weekly、daily三个子文件夹以及这三个子文件夹内的以今天日期为名的子子文件夹,日期文件夹内为图片。
- 图片的命名规则是:排行数-画师id-图片id-该图片的pixiv域名号
- 如果是图集命名规则是:排行数-画师id-图片id_p图集内次序-该图片的pixiv域名号
- 这样的命名规则有助于找到原地址,即http://www.pixiv.net/member_illust.php?mode=medium&illust_id=图片id 和 http://img域名号.pixiv.net/img/画师id/图片id.格式
- 默认下载前一个月、前一周、昨天的全部排行前100,如果只想下前50,可以把最后的for循环改为range(1,2),其他类推;如果只想下monthly,可以只保留for循环内的download(‘monthly’,str(i)),其他类推。
地址:https://github.com/mescoda/pixivCrawler


不需要修改用户名和密码?
@NStal
不用登录
我在wget后面加上了 –referer=http://www.pixiv.net/
诶?我这边如果不登录的话只下的到mode=medium的小图。登录之后才能下到大图(mode=big),否则会被重定向。而mode=manga貌似还是用的是ajax。
得解析javascript…ORZ.
Fate金闪闪这张因为本来就不大所以mode=medium和mode=big的结果是一样的。
Referer是必须的,但是如果不等录mode=big会重定向。
你对比一下
http://www.pixiv.net/member_illust.php?mode=medium&illust_id=23257250
和登录点进去之后的
http://www.pixiv.net/member_illust.php?mode=big&illust_id=23257250
的大小,这个是日榜的第二名。(不能直接URL,得从前一个URL点图片进去)。
http://www.pixiv.net/member_illust.php?mode=medium&illust_id=23257250
看看小图,然后登录点进去到
http://www.pixiv.net/member_illust.php?mode=big&illust_id=23257250
这是daily的第二名。图片很大。
@NStal
我是发现图片命名的规律
小图就是图片id_s,medium就是_m,原图就是直接图片id
所以。。
比如daily第二那张
在榜单的页面找到 http://img19.pixiv.net/img/daria-chocolate/23257250_s.jpg
然后替换成 http://img19.pixiv.net/img/daria-chocolate/23257250.jpg 就是1200×1500的原图
原来如此!!!好巧喵阿~
小白下了Python(for win)和wget,然后将BeautifulSoup.py与pixivCrawler.py置于相同目录下。
不论点哪个py跳出错误就消失了.
用python运行也是..不懂这门语言真悲剧..
@noob
是在cmd里运行的吗?
提示什么错误?
wget有加到环境变量里吗?
谢天谢地谢m大..终于弄好了= =
决定研究python了,不知m大有没各种基础向网址..
@noob
入门书的话
据说《A Byte of Python》不错 http://www.swaroopch.com/notes/Python
还有 O’Reilly的《Python学习手册》, 图灵的《Python基础教程》
额..下了第一张后发现停止下载.出现local variable ‘img’ referenced before assignment错误..用的python2.7.2 32位版本..
是完整下了一张吗?
应该是没这个问题的
你再试试看
嗯..完整下了月排行第一张..之后就是
Traceback (most recent call last):
File “C:\Users\Administrator\Desktop\BeautifulSoup-3.2.0\pixivCrawler.py”, lin
e 63, in
download(‘monthly’,str(i))
File “C:\Users\Administrator\Desktop\BeautifulSoup-3.2.0\pixivCrawler.py”, lin
e 55, in download
for i in range(0,img_num):
UnboundLocalError: local variable ‘img_num’ referenced before assignment
把55行的for i in range(0,img_num): 改成 for i in range(0,len(imgs_new)): 试试
问题解决了…原来是因为我是手动复制过去的,弄错一个缩进- -..再次谢啦.
不客气
还有问题也请多反馈
你好这里是完全的小白……
一运行就出现Traceback (most recent call last):
File “C:\Documents and Settings\Administrator\桌面\BeautifulSoup-3.2.0\pixivCrawler.py”, line 1, in
from BeautifulSoup import BeautifulSoup
File “C:\Documents and Settings\Administrator\桌面\BeautifulSoup-3.2.0\BeautifulSoup.py”, line 448
raise AttributeError, “‘%s’ object has no attribute ‘%s’” % (self.__class__.__name__, attr)
^
SyntaxError: invalid syntax
这个了呢……
出错原因应该是你用的是Python 3 ,可以把3卸载装上2试试 http://python.org/ftp/python/2.7.2/python-2.7.2.msi
谢谢……!
于是,新的问题出现了……
Traceback (most recent call last):
File “C:\Documents and Settings\Administrator\桌面\BeautifulSoup-3.2.0\pixivCrawler.py”, line 63, in
download(‘monthly’,str(i))
File “C:\Documents and Settings\Administrator\桌面\BeautifulSoup-3.2.0\pixivCrawler.py”, line 60, in download
os.remove(folder_root+’\\’+mode+’\\’+folder_time+’/'+ranknum+’-'+artistid+’-'+imgid+’-'+imghost+’.'+imgtype)
WindowsError: [Error 2] : u’D:\\pixiv\\monthly\\2012-02-01/001-liberationzone-24105004-35.jpg’
呃 确定下程序第4行是 folder_root = ‘D:\pixiv’ 吗?还是 folder_root = ‘D:\\pixiv’
是folder_root = ‘D:\pixiv’
先感谢下怎么好的东西,对咱这种懒人实在是太棒了.
按照说明上的做基本没问题,不过咱是小白,有个问题就是咱想把月周日这三个部分分别下载,还有怎样能挂代理下载,因为咱这里直连速度是硬伤而且还是单线程.
@ract
代理可以参考 http://www.satwe.com/archives/355.html 用wget的原生方法,在45行及58行的–referer=http://www.pixiv.net/ 后面加上你相应的代理设置
只想下月榜就在最后的 for i in range(1,3): 里只留下 download(‘monthly’,str(i)) 然后运行一遍
想下周榜的时候就在最后的 for i in range(1,3): 里只留下 download(‘weekly’,str(i))
想下日榜的时候就在最后的 for i in range(1,3): 里只留下 download(‘daily’,str(i))
明白了,感谢
建议写个下载器 可下载自己书签里的图= =
哎,有点麻烦了