zoukankan      html  css  js  c++  java
  • 我的一次思维发散过程

    月底了,电商的一位MM委托我帮忙找200份左右的网页设计的素材,说是急着要上交,来不及了.囧...
    我问了几个问题.先把流程搞清楚了.
    这个流程是这样的:
    登陆到花瓣网 --> 索引需要的素材 --> 选择素材(小图) --> 到素材详细界面 -->右键另存为 -->弹出窗口选择下载存储目录 --> 返回上一界面 ....
    以上过程重复200次.这得有多苦逼了...

    我首先意识到可以设置默认下载地址,这样就可以省了一步流程,但还是很麻烦的.


    其次可以考虑自动抓图工具,chrom插件中,这种工具大把,唯一麻烦的是需要FQ,但对我来说不是什么问题了.于是就安装了这个,但在使用过程中感觉不是很好,不够智能.首先不管什么图都下下来了,需要手动筛选,其次,下来的都是小图.


    想到以前写过类似的爬虫程序,决定下班后自己写一个.

    我仔细分析了花瓣网的页面结构,并且反复抓取后台返回的数据分析.终于发现了关键的地方! (注意那个 orig_source ,可以用正则精确匹配并抓取的)

    剩下的就简单了,以下是爬虫的代码.
       1:  import sys
       2:  import urllib2
       3:  import re
       4:  import uuid
       5:  import random
       6:   
       7:  path ="e:/huaban/"
       8:  def uniqify(seq):
       9:      return {}.fromkeys(seq).keys()
      10:   
      11:  def patt(p,str):
      12:      pattern = re.compile(p,re.IGNORECASE)
      13:      views = pattern.findall(str)
      14:      return uniqify(views)
      15:   
      16:  def getHref (url):
      17:      data = "empty"
      18:      try:
      19:          data = urllib2.urlopen(url).read()
      20:      except Exception,e:
      21:          print e
      22:      finally:
      23:          return data
      24:   
      25:  def trans(v):
      26:      return v if v > 10 else "0" + str(v)
      27:   
      28:  def writef(name,cont):
      29:      if(cont == "empty"):
      30:          return
      31:      f = file(path + name, 'wb')
      32:      f.write(cont)
      33:      f.close()
      34:      print "saved: "+name
      35:   
      36:  def execute_task():
      37:      page = random.randint(1, 10)
      38:      host = "http://huaban.com/search/?q=%E7%BD%91%E9%A1%B5%E8%AE%BE%E8%AE%A1&h8wyjvjx&page=" + str(page) + "&per_page=300&wfl=1";
      39:      page_content = getHref(host)
      40:      op = r'(?<="orig_source":")(\S+?)(?:")'
      41:      images = patt(op,page_content)
      42:      for i in images:
      43:          print(i)
      44:          name = str(uuid.uuid1())+'.jpg'
      45:          writef(name,getHref(i))
      46:   
      47:  if __name__=="__main__":
      48:      execute_task();

    我测试了下,在一般网速下,2分钟就可以抓取200多张了. 考虑到MM本本上不会有python 的环境,我再用 pyinstall 打了个包. 至此总算完成了.

    事后想想,这个程序还是太简单了,其实可以设置个配置文件,配置存储路径,抓取页面地址,匹配正则,抓取数目等等,再把多线程什么的也加上去,倒是个简单通用的产品呢.应该有市场,可是就想想,客户要会正则,会数据分析,那也是同道中人,估计人家会有更好的办法呢.
    先写到这里吧.

  • 相关阅读:
    关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
    Python基础一
    windows环境下 安装python2和python3
    Python数据类型及常用操作
    Python流程控制
    Python用户交互以及数据类型
    Python介绍以及Python环境搭建
    multiprocessor(下)
    multiprocessor(中)
    multiprocess(上)
  • 原文地址:https://www.cnblogs.com/ms_config/p/2747632.html
Copyright © 2011-2022 走看看