爬取pixabay.com图片工具

Posted by zhaoliguang at 2015-03-31 with tags 爬虫, python

由于项目需要,需要爬取一些图片素材。由于国内大部分图片网站都有免责申明,最后选定免版权网站pixabay.com为爬取目标。由于此前只是大概了解过python,并没有实际运用过,因此快速查阅资料后开始了爬虫的制作。首先经过Firefox分析网站页面发现请求地址为: http://pixabay.com/zh/photos/?q=eye&image_type=&cat=&order= q参数代表搜索内容,image_type参数代表图片类型,cat参数不使用,order为排序方式。 接下来解析请求发出后返回来的页面内容,经过firebug调试,发现图片地址为: “” src即为图片地址。根据此地址解析出正则表达式 <div id="photo_grid" class="flex_grid">(.*?)<span id=”paginator_clone” 准备工作做完后,正式开始撸代码,麻烦也正式开始。起初从网上搜索到的爬虫代码都是简单的实现了爬取页面,但是每次大量爬取一些图片后,程序就开始自动中断。因为项目需要的图片有几万张,如果总是出错,下载速度会很漫长。因此开始改进代码,增加了异常处理和多线程,使下载进度趋于稳定,不再进行人为干预,最后放到服务器上稳定运行。虽然寥寥数语,但是由于对python的不熟悉,中间也算历经坎坷,版本一直升级,给进行人工分布式的小伙伴造成了一定困扰,也对小伙伴表示歉意。其中代码解决了大量发出请求时候网站的反爬虫机制,和errno 10054错误引起的困扰。代码下载 多线程下载: class getImage(threading.Thread): def init(self,filename): threading.Thread.init(self) self.filename = filename def run(self): print u’开始下载图片…’

    while(True):
        global imageUrlList
        global imageDownloadCount
        global imageGetCount
        print u'目前捕获图片数量:',imageGetCount
        print u'已下载图片数量:',imageDownloadCount
        imageURL = imageUrlList.get()
        print u'该下载图片地址',imageURL
        try:
            time.sleep(2)
            request = urllib2.urlopen(imageURL)
            data = request.read()
            request.close()
            f = open(self.filename, 'wb')
            f.write(data)
            f.close()

            imageDownloadCount = imageDownloadCount + 1
            if(imageUrlList.empty()):
                break

        except UnicodeDecodeError as e:
            print '-----UnicodeDecodeErrorurl:',imageURL
        except urllib2.HTTPError, e:
            time.sleep(20)
            print 'The server couldn\'t fulfill the request.',imageURL
            print 'Error code: ', e.code

        except urllib2.URLError, e:
            time.sleep(20)
            print 'We failed to reach a server.',imageURL
            print 'Reason: ', e.reason

        except socket.timeout as e:
            print "-----socket timout:",imageURL
        except Exception,e:
            print u'保存图片错误',e

参考资料: * Python爬虫实战四之抓取淘宝MM照片 * python socket 超时设置 errno10054的解决方法

Top

gitHub Pages 建站过程

Posted by zhaoliguang at 2014-07-14 with tags GitHub Pages, git

想搭建个人博客的想法由来已久,但是一直没有付诸实施。曾经也开通过一个新浪博客,但也从未使用,这段时间重新开始学习git,因此也注意到了gitHubpages这个东西。gitHub本身是程序员代码托管平台,gitHub Pages 是github用来介绍项目而提供的页面,但是越来越多的程序员开始利用它来写个人技术博客,而且git hub也乐于程序员使用这个功能,因此也有越来越多的人把个人博客迁移到了github。在阅读了GitHub Pages官方介绍后,我也浩浩汤汤的开始了搭建个人博客之旅。具体过程请看下文详细分解,当然英文好的可以直接跳过下文,查看官方文档,这里也权当个人记录,博君一笑。

在gitHub上搭建博客,首先呢,得有个gitHub账号,嘿嘿,这当然是废话。gitHub地址请戳github,账号注册流程相信大家都会,此处就不细表了。在申请账号后建立自己的仓库,此处仓库名字必须以username.github.io格式命名,这样才能生成自己个人博客,具体介绍请戳GitHub Pages,这里有详细的介绍。

建立博客仓库以后,接下来的就是开始着手博客代码的开发了。当然在这之前还是得熟悉git的使用方法,个人推荐教程地址,请戳Git教程

现在成功之路已经走了一大半了,接下来就是熟悉Jekyll了,Jekyll是一个简单免费的blog生成工具,使用方法也很简单,查看官方文档请戳jekyll。等看完这一系列教程以后相信各位任督二脉已经打通,有html+css基础的人肯定已经迫不及待开始开工上马了,但是像我这种不熟悉css基础的人对网页页面设计还是很发愁的,虽然语法简单,但是设计出好看简洁的页面还这真心不容易。顺便吐槽一句不是所有的程序员都会做好看的网页啊,别动不动就来句,啥?你学计算机的,分分钟钟给我做个网站吧。哎,不是学计算机的都会修电脑啊…跑题了。对于不熟悉网站前端的,其实Jekyll还是有很多模板可以参照的,详情请戳jekyll模板,各种风格都有,总有一款你喜欢的,不会做还不会改嘛,哼哼…

以上基本就是我搭建博客的历程了,当然中间也没这么简单,也查阅了很多资料,描述也省略了很多细节,但是提供的链接里该有的都有了,写的也很好,我也相信人家比我写的好,我就不鲁班门前耍大斧了,只是提供了一个学习的框架。在此主要是给自己总结一下,顺便也给别人给个思路,万一要是真有别人看我的博客呢…

下面是我觉得一些好的参考资料,供大家阅读参考:

Top