http://blog.csdn.net/recsysml/article/details/30541197,我的这个博文介绍了相应的简单的方法做一个联想词的爬虫,而且还承诺了以下优化:
下一版本的优化考虑:
1.让用户自助输入关键i词,不要事先定义关键词列表
2.按回车进行下一个关键词输入
3.输出结果保存txt文本
4.用户输入exit,程序退出
开工:
1.让用户输入关键词,首先想到raw_input(),这个很好解决
2.回车进行下一个关键词输入,这个其实用一个print打印你的引导就行,现在实现的是只要不输入exit按回车都能进行下一个关键词录入,进入循环
3.输出结果保存txt文本,输入一个词,把结果放到相应的txt文本下,如输入“博客”,则保存本地为“博客.txt”
4.用户输入exit,程序退出,设置一个布尔标志变量,True/False,当用户输入exit时,变量值为False,终止循环
大体框架还是上一个博文写的那样,只是基于以前的代码进行修改,具体代码如下:
# -*- coding: utf-8 -*- """ Created on Sat Jun 16 15:54:42 2014 @author: 416 """ #--------------------- # 程序:爬虫采集360搜索关联词 # 语言:python2.7 # 版本:w2 # 时间:[email protected] # 作者:wxx #--------------------- import urllib import urllib2 import re import time import codecs from random import choice class Related_Model: def __init__(self,word): self.word = word self.enable = False#传说中的标志位 self.datas = []#存放关联词的列表 print u'已启动关联词抓取,嘿咻嘿咻。。' def GetWord(self): quote_word = urllib.quote(self.word) print u'你输入的关键词是:',self.word url = "http://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word,obdata&word="+str(quote_word) #头信息 headers = { "GET":url, "Host":"sug.so.360.cn", "Referer":"http://www.so.com/", "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 QIHU 360SE" } iplist = ["14.29.117.36:80","222.66.115.229:80","59.46.72.245:8080"] ip = choice(iplist) #使用IP代理服务器 proxy_handler = urllib2.ProxyHandler({'http': 'http://'+ip}) opener = urllib2.build_opener(proxy_handler) urllib2.install_opener(opener) req = urllib2.Request(url) for key in headers: req.add_header(key,headers[key]) html = urllib2.urlopen(req).read() #将其他编码变成unicode编码 unicodeWord = html.decode("utf-8") #正则表达式,findall方法返回一个列表 ss = re.findall('"word":\"(.*?)\"',unicodeWord) for item in ss: self.datas.append(item+'\t') def SaveWord(self): f = codecs.open(self.word+'.txt', 'w', 'utf-8') #f = open('word.txt','w') for item in self.datas: print type(item) #item的类型 f.write(item) time.sleep(0.2)#要不要无所谓 f.close() print u'文件已经打包成txt保存到本地' print u'按exit退出或按回车继续' myInput = raw_input() if myInput == 'exit': self.enable = False else: self.word = raw_input(u'请输入关键词:') #列表要清零,不然上一个关键词的关联词依然在列表中,又要重写进txt中 self.datas = [] self.Start() def Start(self): self.enable = True print u'正在搜索中。。。' while self.enable: self.GetWord() self.SaveWord() #-------- 程序入口处 ------------------ print u"""#--------------------------------------- # 程序:爬虫采集360搜索关联词 # 版本:w2 # 作者:wxx # 日期:[email protected] # 语言:Python 2.7 # 操作:用户输入关键词,程序返回相关关联词并保存到本地文件 # 功能:将用户输入的关键词的联想词打包txt存储到本地。 #--------------------------------------- """ word = raw_input(u'请输入关键词:') print u'输入的是:',word myModel = Related_Model(word) myModel.Start()
运行结果:
文本如下:
我们打开一个看看:
验证下:
是对的,但是,有个问题,我要说下,就是中文输入的时候,会抓不到。。。也不是抓不到,就是用户输入中文关键词时,根本就显示不了中文,博主最近事多,不能花很多精力各种调,但是为何上一个版本没有问题,想不懂,等下一篇博文解决这个bug,截图看下中文情况:
红框中应该有科学俩字啊,在我测试之后,发现首先输入英文再输入中文,有时候能正常,有时候不行,凌乱啊
下一篇博客我会修正这些bug,大家有啥好建议,或者看出来bug在哪里,给我留言啊!
python爬虫之采集——360联想词W2版本
时间: 2024-10-10 10:12:17