从下面实例中可以学习到网页爬取,正则匹配,字符串过滤存储,文件读写等知识点,详细如下:
1、全局变量在函数中使用时需要加入global声明
2、获取网页内容存入文件时的编码为ascii进行正则匹配时需要decode为GB2312,当匹配到的中文写入文件时需要encode成GB2312写入文件。
3、中文字符匹配过滤正则表达式为ur'[\u4e00-\u9fa5]+',使用findall找到所有的中文字符存入分组
4、KEY,Value值可以使用dict存储,排序后可以使用list存储
5、字符串处理使用split分割,然后使用index截取字符串,判断哪些是名词和动词
6、命令行使用需要导入os,os.system(cmd)
7、下面程序执行结果如下,即找到网页中文名词及词频统计
doc_no word count
1 系统 5
1 账号 2
1 密码 2
1 分辨率 2
1 用户名 1
1 用户 1
1 软件 1
1 苹果 1
1 密码技术 1
1 宽度 1
1 火狐 1
# -*- coding: cp936 -*- import urllib2 import re import sys import os #os.system(cmd)os.system('ls') doc_no = 1 def start_fun(): reload(sys) sys.setdefaultencoding('utf-8') print sys.getdefaultencoding() def testfun(): str_test = "http://hao123.com\" class is >china" searchstr= re.findall(r'http://(.*?)\"',str_test) print searchstr[0] def split_word(webpage_chinese_file,webpage_chinese_word_file): #调用命令行对中文文档进行分词处理 os.system('cd splitword && ictclas_demo_c.exe ../'+ webpage_chinese_file + ' ../'+webpage_chinese_word_file ) def doc_word_count_deal(webpage_chinese_word_file,webpage_all_word_count_docno): global doc_no word_dicts = dict() #1、读取中文分词内容到缓存中 word_file = open(webpage_chinese_word_file,"r") word_buf = word_file.read() word_file.close() #2、将分词以空格分隔并按/过滤提取分词中文内容和词性,不是名词或者长度小于2的不进行记录 word_sets = word_buf.split(' ') for i in word_sets: #print i if i == "" : continue j = i.index('/') #print 'j='+str(j) k = i[j+1:j+2] i = i[0:j] #print i #word_dicts[i]如果不存在KEY则会报KeyError错误 if len(i) <= 2 or (k != None and k != 'n'): #print 'k='+k continue if word_dicts.get(i) == None : word_dicts[i] = 1 else: word_dicts[i] = word_dicts[i] + 1 #sorted(word_dicts.viewvalues()) #list ->word_dicts = [ v for v in sorted(word_dicts.values())] #3、将过滤后的中文分词按照出现次数进行排序,将排序好的数据存储到相应的文件中 word_count = open(webpage_all_word_count_docno,'w') word_dicts_list = sorted([(v, k) for k, v in word_dicts.items()], reverse=True) for i in word_dicts_list: print i[1],i[0] word_count.write(str(doc_no)+" "+i[1]+" "+str(i[0])+"\n") word_count.close() doc_no = doc_no + 1 """ for i in word_dicts.viewkeys(): print i,word_dicts[i] """ def get_webpage_china(url_addr,webpage_src_file,webpage_chinese_file): #reload( sys ) #sys.setdefaultencoding('utf-8') print sys.getdefaultencoding() #1、获取URL地址网页内容,默认为ascii,GB2312编码 url = url_addr content = urllib2.urlopen(url).read() #2、打开文件将网页内容写入文件 file = open(webpage_src_file,'w') file.write(content) file.close #str=f.read() #fp.write(str.encode("utf-8")) #3、正则匹配获取网页中alert中所对应的内容 """ pattern1 = re.findall(r'alert\(\"(.*)\"\)',content) for i in pattern1: print i print 'hello world!\n' sub1 = re.sub(r'alert\(\"(.*)\"\)','Hello World!',content) """ #chinaeseStr = re.match(ur".*[\u4e00-\u9fa5]+",content) #a="
百度知道
" #(?<=>)[^a-zA-Z0-9_]+(?=