月底了,电商的一位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 打了个包. 至此总算完成了.
事后想想,这个程序还是太简单了,其实可以设置个配置文件,配置存储路径,抓取页面地址,匹配正则,抓取数目等等,再把多线程什么的也加上去,倒是个简单通用的产品呢.应该有市场,可是就想想,客户要会正则,会数据分析,那也是同道中人,估计人家会有更好的办法呢.
先写到这里吧.