我的一次思维发散过程

月底了,电商的一位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 打了个包. 至此总算完成了.

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

原文地址:https://www.cnblogs.com/ms_config/p/2747632.html