咋跟写日记一样呢?先啰嗦两句
我一直觉得“懒惰”对于进步有很正面的影响。当然了,这里的“懒惰”是指能用脑子解决的坚决不动手!因为动手累啊。。。对于学计算机的人来说应该再加上一条:能用计算机解决的就别用脑子,因为人脑会疲劳会出错。(逼先装到这)
起因
其实这个事是这样的,我们大数据组有几个同学负责在网上抓数据,我也不知道抓了多久,那个spider就写了好几千个(目测两千)我擦这任务量,随说框架搭好了写spider就跟写填空题一样(不过碰到js渲染或者post、json啥的还是得认真一下的。。),但是这工作量也是很让人吃惊的。
然后领导就想看一看有多少地区的spider被搞定了,要具体的省市地名还有url链接,这体力活自然就被分给我这个实习生了。当时心里那个苦啊,这跟搬砖没区别啊,难道我要在上千个 .py(我们用的Python)文件中去找?按照name后面的拼音再去百度地名?在把start_urls里的链接粘出来?我擦,那我不得做上好几天啊,而且最后很可能还会出错。所以就想办法啊
搬砖过程
我们这个框架用的是scrapy,了解scrapy自然就知道我上面说的name 和 start_urls了。我是这么搞得,我把所用的.py文件按照省份放在了不同的文件夹里(就这种)
然后写了一个批处理文件用来把所用.py 文件重命名成.txt文件 就是个cmd命令: ren *.* *.txt ,改成.bat双击执行
然后就写个脚本从里面所有文件夹里依次读,把里面的name 和 start_urls里的链接拽出来最后写在一个文件里(到这里执行时间只有15分钟左右),渣代码我会扔到最后,看官老爷们先别笑。最后搞出来是这样的
里面有网站链接就不放图了。。。
类似这种: 省:guangdong 地方:guangzhou-baiyun 链接:“http://www.abcderhdehfiwfhwfhjeoifhjewifh.com”
每行都是,精确到县、区的等级,看了一眼1000多行(因为只是spider里的一个分支部分)
新的问题啊!!,name里的是拼音,劳资要的是汉字地名啊,卧槽这咋搞,难道还是要搬砖???
这时我想起来了,每个省市地方网上有名单啊,很全啊,然后搞了一个,用Python上的pinyin这个包,把这些地名都转成了拼音(和汉字可以对照)
然后每行 省:guangdong 地方:guangzhou-baiyun 链接:“http://www.abcderhdehfiwfhwfhjeoifhjewifh.com”分隔开
丢进去对照着找汉字,到这里我已经搞了四十多分钟了
丢进去转换之后又有新问题了,其实早就料到了,拼音转换本来就有缺点,比如苏州和宿州他俩是很容易搞混
不过先批量把乱七八糟的符号去掉吧(这个时候用Excel都比写脚本快),不过还是写了一个把文件按照单元格写进Excel文件的脚本,最后发现还是得手动改改,不过工作量小了太多了,最后我只手动改了80个左右,还是只规范地名,就这我都搞了快两个小时,心累啊
# coding=utf-8 import os import chardet import xlwt from pypinyin import pinyin, lazy_pinyin import sys reload(sys) sys.setdefaultencoding('utf8') sheng_name = ['anhui', 'beijing', 'chongqing', 'fujian', 'guangdong', 'guangxi', 'jiangsu', 'neimenggu', 'shaanxi', 'shanxi', 'shanghai', 'sichuan', 'zhejiang', 'tianjin'] f = open('C:/Users/Administrator.USER-20170418GW/Desktop/03.txt','r') chinese_pinyin_list = [] for line in f: a = 0 for ch in line: if ch == 'h' or ch == 'w': line = line.split(ch)[0] continue for ch in line: if ch == '\t' and a == 0: line = line.replace('\t','').replace('\n','') else: a = 1 new_line = line.decode('utf-8') chinese_pinyin_list.append(line+':'+''.join(lazy_pinyin(new_line))) dic = {} f=open('result.txt','w') for sheng in sheng_name: filepath = 'C:/Users/Administrator.USER-20170418GW/Desktop/count/' + sheng + '/' pathDir = os.listdir(filepath) for allDir in pathDir: if 'git' in allDir: pass else: filename = os.path.join('%s%s' % (filepath, allDir)) fopen = open(filename, 'r') url_list = [] place = [] type_url_a = 0 for eachLine in fopen: if 'pep_' in eachLine: place = eachLine.split('_') if 'www' in eachLine or 'http:' in eachLine or ']' in eachLine or 'https:' in eachLine: if type_url_a == 0: url_list.append(eachLine) if ']' in eachLine: a = 1 for c_p in chinese_pinyin_list: if sheng == 'shanxi': sheng = u'山西' if sheng in c_p: sheng = c_p.split(':')[0] continue if sheng == 'shaanxi': sheng = u'陕西' new_place = [] for c_p in chinese_pinyin_list: for p in place[1:-1]: if p in c_p: p = c_p.split(':')[0] new_place.append(p) placename = u"省:" + sheng.split('\t')[0] + u" 地方:" + '-'.join(new_place[:len(place[1:-1])]) url = u' 链接:'+''.join(url_list).replace(' ','').replace('\n','').split(']')[0].split('[')[-1] print placename,url f.write(placename) f.write(url) f.write('\n') fopen.close() f = open('C:/Users/Administrator.USER-20170418GW/Desktop/result.txt','r') wbk = xlwt.Workbook() sheet = wbk.add_sheet('pep_over_url') a=0 for line in f: print line sheng = line.split(u'地方')[0].replace(u'省:','') sheet.write(a, 0, sheng) place = line.split(u'地方')[-1].split(u'链接')[0] sheet.write(a, 1, place) url = line.split(u'链接')[-1] sheet.write(a, 2, url) a+=1 wbk.save('test.xls')