美文网首页python爬虫DevOpsPython
从python开始一个全栈项目 程序员&设计师福利篇

从python开始一个全栈项目 程序员&设计师福利篇

作者: 代号027 | 来源:发表于2016-07-14 22:26 被阅读2757次
    更新 7月16日18点

    现在不会自己写代码调用API的同志们可以直接访问咯

    地址 datastack.cc/design
    更新一张预览图:

    从python开始一个全栈项目 程序员&设计师福利篇 从python开始一个全栈项目 程序员&设计师福利篇
    更新 7月16日12点

    现在我们可以愉快的使用了,flask API和后台服务已经部署在了服务器上(新加坡)!!!

    地址 http://api.datastack.cc

    恩,更新一下,目前已经可以在HTML页面进行数据展示了:

    web界面运行效果图 配图纯属为了好看

    我在说什么

    声明:
    1.我不是一个标题党
    2.我一般只提供干货

    事实上,我实在干这样一件事,他大概分为如下几个步骤:

    一、获取一些优秀的设计素材的数据
    二、存储和筛选这些数据
    三、编写一套API提供数据
    四、编写一个网页调用API 展现数据
    五、编写iso和android客户端展现数据

    应用场景:
    当你在闲暇的时候,打开手机或者网页,查看一下最近有没有什么好的设计素材或者比较感兴趣的HTML页面。
    恩,你可能看到很多,突然发现一个让你眼前一亮的,然后你手藏了他。
    有一天你正在写一个HTML页面或者设计产品原型,突然,你的脑子里闪过一些东西,于是你打开了你的手机查看了一下收藏夹......

    接下来,我们就来看看,如何实现:

    数据获取

    首先,数据主要是从各大免费的设计素材资源网站拿到的,这需要用到python爬虫。
    其次,这类网站大量的使用了JS来加载内容,我选择selenium+phantomJS渲染JS。
    最后,从爬取到的内容内获取想要的,我选择用pyquery来获取html节点(不要问为什么,因为我习惯用jquery!)

    存储数据

    数据结构

    数据结构很简单,我不过就是想获取一张预览图,一个预览地址(或者下载地址),还有标题!
    一条数据大概会是这样:

    {
      "download": "http://www.doooor.com/thread-2762-1.html",
      "preview": "http://img.doooor.com/img/forum/201404/16/173909sczpof6sf26eckcf.jpg.thumb.jpg",
      "title": "STARS TOUCH 完全扁平化网页设计"
    }
    
    数据持久化

    我们对数据的存储要求不是很高,因为最近在学习redis,所以就用redis,利用快照持久化!

    爬虫的框架

    一、我不懂什么框架,而且总体来说,要爬取得网站就那几个。自己编写一下规则就好了。
    二、避免重复工作,用redis来存储待爬和爬过的url。
    三、分布式? 哈哈,也许,可能大概是支持的吧。
    四、效率?使用了selenium和phantomJS,貌似不用谈效率了,不过有些优化的小知识啦!
    五、我是怎么实现的:
    首先,我定义了一个爬虫服务 service.py,主要作用是连接redis,开始爬取工作,记录工作内容和工作结果。
    然后,我写了一个爬虫工具 servicetools.py, 主要作用是模拟浏览器访问url,查找需要的元素和内容。

    service.py 管理者-劳动者模式 (管理者Master发布任务,劳动者Work进行具体工作.)

    管理者维护一个Redis 的 List 按照先进先出的模式, 每次发布一个url出去
    劳动者接收到管理者的url,开始执行网页爬取工作,工作完成后 管理者pop掉这个url
    劳动者如果获取的数据是url,则封装成list 提交给管理者, 管理者挨个push url.

    servicetools.py(具体的网页爬取工作)

    使用phantomJS和selenium结合,使用pyquery进行节点和内容的获取,不同的网站需要不同的规则。

    目前实现的功能 和存在问题:

    总体来说,运行良好,效率足够(根本不是实时系统嘛)!
    额,比较费内存,可以在晚上睡觉之前执行,偶尔会出现假死,主要是phantomJS的优化没做!
    如果程序异常推出,再次启动依旧能够继续工作,且不重复之前工作!

    API的实现

    上面的爬虫运行半个小时之后,大概就会有500多条有效数据,这些数据全部被存在redis里面(hset)。
    可以参见我之前的文章快速入门 基于Flask实现Restful风格API,比较详细的介绍了如何使用flask来实现一个restful的API。

    这里的flask程序需要从redis拿数据,我自己定义了一个数据源(连接redis分发数据)。

    目前已经完成的工作

    目前已经基本实现API获取数据,爬虫还正在努力的运行,稳定以后,将会设置系统任务,在每天半夜3点开始,五点结束。

    看一张效果图吧:

    API 可以返回简洁有用的数据 随便点击一个,预览图片也很不错呢

    下一步的工作

    继续发现和修补爬虫的bug
    增加用户系统和认证机制,这样大家就可以收藏了
    租一个云主机(求有需求的伙伴打赏)
    编写客户端

    公开源代码

    github地址

    最后,如果你对这个项目感兴趣,请发我简信,或者直接在下面评论!
    还有,服务器好贵,真希望有人能打赏,让我早点把API公开。

    相关文章

      网友评论

      • NULL_POINTER:五、编写iso和android客户端展现数据,这句有个地方写错了,是ios
        George2016:@NULL_POINTER 不是ios是iOS小写的i大写的OS
        代号027: @NULL_POINTER 谢谢指正
      • 代号027:大家注意咯,资源更换了,预计一个小时后服务器将加载高清大图,没有用wifi的盆友们如果访问预览的demo,会加载比较大的图片,一定要慎重!当然,土豪请随意!
      • yingke_gao:现在获取不到数据啊
        yingke_gao:@一点简单 :joy: 我刚才试了一下 发现data为空 你加油·!
        代号027:@yingke_gao 服务器正在跑爬虫的后台服务呦,估计这会儿快把入口爬完了!
        代号027:之前有七千多条国内的资源,我flush掉了!现在正在努力爬区国外资源!预计明天上午就有海量高质量数据了!
      • 田飞雨:程序一丁点注释都没有,连 readme 都没有, :sob:
        田飞雨:@一点简单 啥时候改好,改好给我说一下,我也看看学习下
        代号027:@田飞雨 :smile: ,代码有改动了,注释和依赖还有说明都有咯
        代号027:@田飞雨 :smile: 不要着急,会有的,代码正在改动
      • xuzhougeng:有问题可以 请教你么
        代号027:@hoptop 被大赏的感觉真好!
        代号027:可以呀,一起探讨
      • kidz:加油
        代号027:@kidz :smile: 超负荷运行中
      • _叫我周先生_:一个做设计的,想学点程序,还有戏么:stuck_out_tongue_winking_eye:
        _叫我周先生_:@一点简单 就等你这句话,哈哈,有空给我指指方向,让我上手容易点
        代号027:@周林海 想做,什么时候都不晚!再说编程那么简单,想学我教你呀!
        代号027:@周林海 我说没戏,你就不学了吗?
      • 代号027:我承认了,服务器不贵……我还有好几台阿里云的ECS空闲着,我就是想体验一下被打赏的感觉
      • 太二道士:自己最近也在研究爬虫,会做App,有兴趣的话可以一起搞个客户端:smile:
        代号027:@lifeiccl 当然有兴趣,所有有意义的事我都有兴趣!
      • zhisheng_blog:腾讯云服务器学生价1元一个月
        代号027:@花开不败tzs 我不是学生:sweat:
      • RedGecko:有借鉴意义哈哈哈
        代号027:@RedGecko 全部给你都行

      本文标题:从python开始一个全栈项目 程序员&设计师福利篇

      本文链接:https://www.haomeiwen.com/subject/cbtyjttx.html