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

想法和一些代码引用邸一幕python培训黄哥python爬虫联想词视频,但是太罗嗦。顺便整理,而到现在为止,360不傻。它已演变,用原来的方式,有些bug,这接着说。

正题例如以下:

语言:python2.7.6

模块:urllib,urllib2,re,time

目标:输入随意词,抓到其联想词

版本号:w1

原理:在360搜索主页:http://www.so.com/。当你输入”科技“时,搜索框会列出对应的联想词或者短语。我们就是要得到这些联想词,那就要爬360的搜索引擎了。在输入关键词之前,我们在主页右键。”审查元素“——”Network“——”Name“。输入之后,以下会出现对应的超链接。我们仅仅观察”Headers“”Priview“,”Headers“下我们能够看到”“Request URL”和头信息(主机,代理之类的),“Priview”中看到一个我输入的样例:

suggest_so({"query":"科技 ","result":[{"word":"科技美学"},{"word":"科技苑"},{"word":"科技部"},{"word":"科技管理研究"},{"word":"科技少女喵","obdata":"{\"t\":\"video\",\"d\":[2,\"http:\/\/p0.qhimg.com\/d\/dy_acba03288ce64a69a324a94921324cb6.jpg\",\"\u9ad8\u79d1\u6280\u5c11\u5973\u55b5\",\"http:\/\/www.360kan.com\/tv\/Q4pwcH3lRG4lNn.html\",3,12]}"},{"word":"科技日报"},{"word":"科技发展利大还是弊大"},{"word":"科技超能王"},{"word":"科技网"},{"word":"科技进步与对策"}],"version":"a"});

非常明显。我们仅仅要抓到里面的词就可以,忘了交代。在Request URL中。有一个链接:http://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word,obdata&word=%E7%A7%91%E6%8A%80%20,我们输入非常多次发现,变得仅仅是“%E7%A7%91%E6%8A%80%20”部分。也就是说前面的部分不变。我们能够直接拿来用,后面的部分随着输入的关键词不同而变化。这是一种URL编码,能够用urllb.quote()方法实现。

操作:1.加头信息。读取网页,相关方法:urllib2.Request()。urllib2.urlopen()。urllib2,urlopen().read()

2.正则匹配:方法:re模块的相关使用方法,各抒己见。

代码例如以下:

#coding:utf-8
import urllib
import urllib2
import re
import time

gjc = urllib.quote("科技")
url = "http://sug.so.360.cn/suggest?

callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word,obdata&word="+gjc
print url
req = urllib2.Request(url)
html = urllib2.urlopen(req).read()
unicodePage = html.decode("utf-8")
#正則表達式,findall方法返回一个列表
ss = re.findall('"word":\"(.*?)\"',unicodePage)
for item in ss:
    print item

结果:

假设不加unicodePage = html.decode("utf-8") 。返回值会穿插一些乱码,以下我们验证下,我们做的对不正确,打开360搜索。输入“科技”。结果例如以下:

大家不要纠结,第一个和第二个关联词的顺序,我第二次请求的时候就变成了上图的结果。再一次请求,又变回来了,可能是360在变吧,大家能够用其它关键词试试。

好,大体框架已经实现,这是个最初版本号。还不能全然无限制使用。我们要做的是畅通无阻,那么存在什么问题呢?

问 题:1.多次请求会出现一个错误,大概代号为1005,意思百度了下,好像是说站点会限制非人为的请求。那我们要伪装成用户正常打开站点的行为。我们要用到头信息(这是我自己习惯叫的,我们採用“Request Headers”里面的信息就可以

2.请求过快也可能被屏蔽。所以要在每一次请求之后让爬虫歇息一下。这就是time.sleep()的作用

3.即使这样,也有被屏蔽的可能,必杀技:使用ip代理server,百度ip代理,一大堆免费的,方法:见urllib2 api example

优化的代码例如以下:

#coding:utf-8
#---------------------
#   程序:爬虫採集360搜索关联词
#   语言:python2.7
#   版本号:w1
#   时间:2014-06-14
#   作者:wxx
#---------------------
import urllib
import urllib2
import re
import time
from random import choice

#ip代理列表
iplist = ["14.29.117.36:80","222.66.115.229:80","59.46.72.245:8080"]
ip = choice(iplist)
#print ip
#关键词列表,顺序搜索
list = ["集团","科技","python"]
for m in list:
    #quote将m转变成URL编码
    gjc = urllib.quote(m)

    url = "http://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word,obdata&word="+gjc
    #头信息
    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"
                }
    #使用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编码
    unicodePage = html.decode("utf-8")
    #正則表達式。findall方法返回一个列表
    ss = re.findall('"word":\"(.*?)\"',unicodePage)
    for item in ss:
        print item
    #休眠2秒
    time.sleep(2)

结果截图:

下一版本号的优化考虑:

1.让用户自助输入关键i词,不要事先定义关键词列表

2.按回车进行下一个关键词输入

3.输出结果保存txt文本

4.用户输入exit。程序退出

參考视频:http://www.tudou.com/programs/view/SXgshk-sYbw/

版权声明:本文博客原创文章。博客,未经同意,不得转载。

时间: 2024-08-27 16:10:56

python爬行动物集合360联想词搜索的相关文章

python爬虫之采集——360联想词W2版本

http://blog.csdn.net/recsysml/article/details/30541197,我的这个博文介绍了相应的简单的方法做一个联想词的爬虫,而且还承诺了以下优化: 下一版本的优化考虑: 1.让用户自助输入关键i词,不要事先定义关键词列表 2.按回车进行下一个关键词输入 3.输出结果保存txt文本 4.用户输入exit,程序退出 开工: 1.让用户输入关键词,首先想到raw_input(),这个很好解决 2.回车进行下一个关键词输入,这个其实用一个print打印你的引导就行

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

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

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

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

搜索热词 搜索联想词

/*    so.js    HEAD 搜索框js所有逻辑都放在这里    by sunhw 2014-9-22*/T.dom.ready(function(){    //搜索下拉联想词    F.load('widget.autocomplete.autoComplete', function(){        var mask = T.get('so-mask');        if(!mask) return;        this.show({            render

一步一步跟我学习lucene(10)---lucene搜索之联想词提示之suggest原理和应用

昨天了解了suggest包中的spell相关的内容,主要是拼写检查和相似度查询提示: 今天准备了解下关于联想词的内容,lucene的联想词是在org.apache.lucene.search.suggest包下边,提供了自动补全或者联想提示功能的支持: InputIterator说明 InputIterator是一个支持枚举term,weight,payload三元组的供suggester使用的接口,目前仅支持AnalyzingSuggester,FuzzySuggester andAnalyz

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

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

Eclipse用法和技巧二十七:定义自己的快速联想词

某天在调试代码的时候,虽然是android的project还是习惯的输入syso,然后在ALT+/一下.旁边的同事就问了一下,这个log打印输出的tag是什么.接着又问了为什么syso能够智能联想出这个.第一个问题很好回答,不过对于第二个问题还真答不上来.大学里面第一次见某个学长使用这个技能之后,就默默的记住了,也没有多想是什么回事.这两天留意了一下,原来是类似java代码模版的一个东东.在一想为什么不自己定义android的联想词呢...        步骤一:打开preference,搜索e

python基础---集合类型(Sets)

集合类型(Sets) 集合对象是不同的(不可重复)hashable对象的无序集合.常见用法包括:成员关系测试.移除序列中的重复.以及科学计算,例如交集.并集.差分和对称差分.通俗点来说,集合是一个无序不重复元素的数据集,其基本功能是进行成员关系测试和消除重复元素. 目前有两种内置的集合类型:set 和 frozenset.set类型是可变的--可以使用add() 和 remove()等方法更改其内容.由于它是可变的,它没有hash值,因此它不能被当做字典的键值或另一集合的元素.frozenset

【python gensim使用】word2vec词向量处理英文语料

word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间的距离. 它将term转换成向量形式,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度. word2vec计算的是余弦值,距离范围为0-1之间,值越大代表两个词关联度越高. 词向量:用Distributed Representation表示词,通常