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
#   时间:[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

python爬虫之采集——360联想词W2版本的相关文章

python爬虫之采集360搜索的联想词

有个视频专门讲过这个爬虫,但是太罗嗦了,顺便整理下,而且到现在,360也不傻,已经进化了,采用原来的方式,多少有点bug,这个后面会说.正题如下: 语言:python2.7.6 模块:urllib,urllib2,re,time 目标:输入任意词,抓到其联想词 版本:w1 原理:在360搜索主页:http://www.so.com/,当你输入"科技"时,搜索框会列出相应的联想词或者短语,我们就是要得到这些联想词,那就要爬360的搜索引擎了.在输入关键词之前,我们在主页右键,"

python爬行动物集合360联想词搜索

想法和一些代码引用邸一幕python培训黄哥python爬虫联想词视频,但是太罗嗦.顺便整理,而到现在为止,360不傻.它已演变,用原来的方式,有些bug,这接着说. 正题例如以下: 语言:python2.7.6 模块:urllib,urllib2,re,time 目标:输入随意词,抓到其联想词 版本号:w1 原理:在360搜索主页:http://www.so.com/.当你输入"科技"时,搜索框会列出对应的联想词或者短语.我们就是要得到这些联想词,那就要爬360的搜索引擎了.在输入关

go语言实现爬虫采集联想词

/**************************************************** go语言实现爬虫_联想词 咨询:qq:1465376564 黄哥python培训班所写 python北京周末培训班 https://github.com/pythonpeixun/article/blob/master/beijing_weekend.md python 上海周末培训班 https://github.com/pythonpeixun/article/blob/master/

Selenium2+python自动化34-获取百度输入联想词

前言 最近有小伙伴问百度输入后,输入框下方的联想词如何定位到,这个其实难度不大,用前面所讲的元素定位完全可以定位到的. 本篇以百度输入框输入关键字匹配后,打印出联想词汇. 一.定位输入框联想词 1.首先在百度输入框输入关键词,如:博客,然后输入框下方会自动匹配出关键词. 2.这时候可以用firebug工具定位到联想出来的词,可以看到下方匹配出来的词都有共同的class属性,这时候就可以全部定位到了. 二.打印全部匹配出来的词 1.通过get_attribute()方法获取到文本信息 三.参考代码

用Python爬虫对豆瓣《敦刻尔克》影评进行词云展示

最近很想看的一个电影,去知乎上看一下评论,刚好在学Python爬虫,就做个小实例. 代码基于第三方修改 原文链接  http://python.jobbole.com/88325/#comment-94754 #coding:utf-8 from lib2to3.pgen2.grammar import line __author__ = 'hang' import warnings warnings.filterwarnings("ignore") import jieba #分词包

【python爬虫】根据查询词爬取网站返回结果

最近在做语义方面的问题,需要反义词.就在网上找反义词大全之类的,但是大多不全,没有我想要的.然后就找相关的网站,发现了http://fanyici.xpcha.com/5f7x868lizu.html,还行能把"老师"-"学生","医生"-"病人"这样对立关系的反义词查出来. 一开始我想把网站中数据库中存在的所有的词语都爬出来(暗网爬虫),但是分析了url的特点: http://fanyici.xpcha.com/5f7x86

Python爬虫b站视频弹幕并生成词云图分析

爬虫:requests,beautifulsoup 词云:wordcloud,jieba 代码加注释: 1 # -*- coding: utf-8 -*- 2 import xlrd#读取excel 3 import xlwt#写入excel 4 import requests 5 import linecache 6 import wordcloud 7 import jieba 8 import matplotlib.pyplot as plt 9 from bs4 import Beaut

[Python爬虫] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题

最近研究搜索引擎.知识图谱和Python爬虫比较多,中文乱码问题再次浮现于眼前.虽然市面上讲述中文编码问题的文章数不胜数,同时以前我也讲述过PHP处理数据库服务器中文乱码问题,但是此处还是准备简单做下笔记.方便以后查阅和大家学习. 中文编码问题的处理核心都是--保证所有的编码方式一致即可,包括编译器.数据库.浏览器编码方式等,而Python通常的处理流程是将unicode作为中间转换码进行过渡.先将待处理字符串用unicode函数以正确的编码转换为Unicode码,在程序中统一用Unicode字

前嗅ForeSpider教程:采集360问答

今天,小编来教大家如何采集论坛自媒体类网站的数据,以采集360问答为例,为大家进行演示操作,该操作同样适用于其他类似网站:第一步:新建任务 ①点击左上角"加号"新建任务,如图1:②弹窗里填写采集地址,任务名称,开启手动登录配置,如图2:若未在此处开启登录配置,可在模板抽取配置中点击相应的模板,开启登录配置,如图3.③点击下一步,选择进行数据抽取还是链接抽取,本次采集列表下的正文数据,所以本次需要抽取内容选择链接列表,所以点击抽取链接,选择链接列表,如图4:④完成后模板抽取配置列表有两个