zoukankan      html  css  js  c++  java
  • python爬虫之採集——360联想词W2版本号

    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
    #   时间:2014-06-14@PM
    #   作者: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代理server
            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+'	')
                    
        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
    #   日期:2014-06-16@PM
    #   语言:Python 2.7
    #   操作:用户输入关键词,程序返回相关关联词并保存到本地文件
    #   功能:将用户输入的关键词的联想词打包txt存储到本地。
    #---------------------------------------
    """
    word = raw_input(u'请输入关键词:')
    print u'输入的是:',word
    myModel = Related_Model(word)
    myModel.Start()
    执行结果:

    文本例如以下:

    我们打开一个看看:

    验证下:


    是对的,可是,有个问题,我要说下,就是中文输入的时候,会抓不到。。。也不是抓不到,就是用户输入中文关键词时,根本就显示不了中文,博主近期事多,不能花非常多精力各种调,可是为何上一个版本号没有问题,想不懂,等下一篇博文解决这个bug,截图看下中文情况:


    红框中应该有科学俩字啊,在我測试之后,发现首先输入英文再输入中文,有时候能正常,有时候不行,凌乱啊

    下一篇博客我会修正这些bug,大家有啥好建议,或者看出来bug在哪里,给我留言啊!




  • 相关阅读:
    各种知识点
    链表
    滑动窗口
    数组

    【转】无重复字符的最长子串
    【转】荷兰国旗问题 三指针排序
    【转】回溯思想团灭排列、组合、子集问题
    【LeetCode】45. 跳跃游戏 II
    动态分配内存初始化二维数组
  • 原文地址:https://www.cnblogs.com/blfshiye/p/3802845.html
Copyright © 2011-2022 走看看