这个其实是三月份的时候做的, 当时刚刚学会用urllib和正则表达式做一些爬虫, 于是结合人民群众的需要, 写了个小脚本(福利~)
不过现在我还只是会照葫芦画瓢那样用urllib, 没什么长进...
github地址: https://github.com/X-Wei/yssy_ppp_pic_downloader
1.
功能就是下载水源ppperson板里帖子的图片, 并且每个帖子一个文件夹放好. 通过修改main函数可以选择下载最近一页的帖子还是下载全部帖子(或者最近几页的帖子)
原理很简单, 分析网页的html代码, 用正则表达式找出图片的地址然后下载到本地. 当时我已经写了两三个简单的爬虫, 所以这个写得蛮快, 而且只用50行就搞定了...
不会用多线程, 只能一张一张下载, 帖子数目实在太多了, 我让它跑了一晚上, 第二天跑完, 下载了8个G的图, 几千个文件夹(囧)......
2.
不过还是遇到了一些问题, 比较老的帖子会有些图片404, 这时或者这个帖子对应的文件夹为空, 或者里面的图片其实不是图片, 而是出错信息的html代码(虽然看后缀是个图片). 我需要把那些不是图片的文件删掉, 而且要删掉所有的空文件夹.
删除不是图片的文件(其实应该是删除纯文本文件), 在水源发贴问, 用shell命令(perl)做到了(虽然不明白为什么这样写...):
find yssy_ppp/ -type f | perl -ne 'chomp;unlink "$_" if -T $_'
关于删除空目录, 发现rmdir
命令就已经可以了, 会删除空文件夹, 非空文件夹不会删除(虽然会显示警告).
python里面调用shell命令只需要:
os.system("shell_command")
所以, 只需要在程序的最后加上两行: os.system('''find yssy_ppp/ -type f | perl -ne 'chomp;unlink "$" if -T $' ''') os.system('rmdir yssy_ppp/*')
虽然终端里运行时最后会因为那个rmdir
命令出一堆警告, 但是既然功能实现了就懒得改了...
3.
还写(改写)过一个人人相册下载的脚本, 不过需要改进, 不知毕业前能不能搞定......
Disqus 留言