想法和一些代码引用邸一幕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/

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

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

  1. python爬虫之採集——360联想词W2版本号

    http://blog.csdn.net/recsysml/article/details/30541197,我的这个博文介绍了对应的简单的方法做一个联想词的爬虫,并且还承诺了下面优化: 下一版本号的 ...

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

    前言 最近有小伙伴问百度输入后,输入框下方的联想词如何定位到,这个其实难度不大,用前面所讲的元素定位完全可以定位到的. 本篇以百度输入框输入关键字匹配后,打印出联想词汇. 一.定位输入框联想词 1.首 ...

  3. Selenium2+python自动化34-获取百度输入联想词【转载】

    前言 最近有小伙伴问百度输入后,输入框下方的联想词如何定位到,这个其实难度不大,用前面所讲的元素定位完全可以定位到的. 本篇以百度输入框输入关键字匹配后,打印出联想词汇. 一.定位输入框联想词 1.首 ...

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

    某天在调试代码的时候,虽然是android的project还是习惯的输入syso,然后在ALT+/一下.旁边的同事就问了一下,这个log打印输出的tag是什么.接着又问了为什么syso能够智能联想出这 ...

  5. python抓取数据构建词云

    1.词云图 词云图,也叫文字云,是对文本中出现频率较高的"关键词"予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨. 先看几个词 ...

  6. Eclipse使用方法和技巧二十七:定义自己的高速联想词

    某天在调试代码的时候.尽管是android的project还是习惯的输入syso.然后在ALT+/一下. 旁边的同事就问了一下,这个log打印输出的tag是什么. 接着又问了为什么syso可以智能联想 ...

  7. Elasticsearch之联想词示例

    public class LianXiangWord { private static RestClient client; static { client=RestClient.builder(ne ...

  8. python set集合(16)

    在python变量中除了以前文章所提到的整形int / 浮点数float / 布尔值bool / 列表list / 字典dict 之外,还有一个类型我们还没有做详细介绍,这个变量类型就是集合set. ...

  9. python frozenset集合(17)

    在前一篇文章中我们对 python set集合 做了详细的讲解,而本文讲解的 frozenset集合 其实和set集合类似!区别在于frozenset集合不能修改/添加/删除,其他功能和set集合一样 ...

随机推荐

  1. 【手打】LZW编码的C/C++实现

    LZW编码通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩. LZW压缩算法是Unisys的专利,有效期到2003年,所以相关算法大多也已过期. 本代码只完毕了LZW的编码与解码算法功能 ...

  2. 2014年国内经常使用移动client推送服务介绍和比較

    经过5年移动互联网的迅速发展,如今推送服务方面国内已经出现了非常多产品,比如极光推送,个推,一推,百度推送,友盟推送等,我们在选择推送服务时,首先排除了付费的推送服务,重点调查了免费的推送服务.   ...

  3. vtk基础编程(2)-读取数据文件中的坐标点

    原文地址: http://blog.csdn.net/chinamming/article/details/16860051 1. 案例说明 在实际计算中,常常需要大量的数据, 这个时候数据文件就必不 ...

  4. WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下?

    原文 WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下? 一.问题的提出 偶然发现,Winform里的WebBrowser和IE实际安装的版本似乎并不同步,很有趣! 下 ...

  5. 互联网组织的未来:剖析GitHub员工的任性之源(转)

    如果有这么家任性的公司,没有所谓“经理人”这一层,人都在做自己喜欢的事情,并且创造价值,而其他的事情,就顺其自然让他发生.这里能节省多少官僚主义带来的浪费?这样的公司得跑得有多快?得有多少无谓的冲突消 ...

  6. 【虚拟化实战】容灾设计之一VR vs SRM

    作者:范军 (Frank Fan) 新浪微博:@frankfan7 从本文开始,我们将介绍一系列的关于容灾的解决方案.先探讨应用的场景,然后再深入介绍技术架构. 情景一: 某小型公司的虚拟化环境中,在 ...

  7. JQuery5.04获取

    获取body:  $('body'); 或者 $(document.body); 获取元素标签:$('div');   $('a'); 获取ID: $('id'); 获取某个元素的某个属性: $('a ...

  8. Java学习——何为JNDI

    曾记得在做机房收费系统的时候就接触到了API,由于它的功能非常强大,可是自己对它却不怎么了解.所以当时是又爱又怕.现在,一路走来才明确,事实上它就是一组接口.仅仅要我们去了解它就会发现.它事实上也没想 ...

  9. password学3——Java BASE64加密解密

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之中的一个,大家能够查看RFC2045-RFC2049.上面有MIME的具体规范.Base64编码可用于在HTTP环境下传递较长的标识信息 ...

  10. 利用VS2005进行dump文件调试(17篇博客)

    前言:利用drwtsn32或NTSD进行程序崩溃处理,都可以生成可用于调试的dmp格式文件.使用VS2005打开生成的DMP文件,能很方便的找出BUG所在位置.本文将讨论以下内容: 1.  程序编译选 ...