通过刷新搜索词看三种主要搜索引擎区别
2008-04-14 17:24
330 查看
探测搜索引擎
目前的搜索引擎具有一些智能引导的功能,当输入一个关键词搜索后,返回的内容中会包括相关内容的搜索链接。比如,我们在google、百度中搜索“电影”,返回的页面中会有“免费电影”、“在线电影”、“电影下载”等多项搜索的链接。应该是引擎根据关键字作出了判断,把用户可能会感兴趣的相关内容展示给用户。
这个功能对网站的推广有一定的用处。比如,为了让网站的相关关键字发生联系,有一种网上介绍的推广方法就是用这些关键字的组合去大量地刷新引擎。通过这种人为的方式影响搜索引擎的返回结果。
好了,现在我们手里有了几十组关键字的组合,一开始的做法是发动公司相关人员打开网页进入搜索。再使用这些关键词去搜索。这种方法太依赖人,脚本程序最适合做这种重复的工作。当然,刷新的频率不能太高,以免被引擎列入黑名单。不过这种做法是否真的有效,只有做搜索引擎的人知道了。
好,我们的方案是使用Python,这是一种脚本语言,非常简单。几句话就写好了。比如:
import urllib
f = urllib.urlopen('http://www.google.com')
print f.read()
这几句话的意思是访问google的首页。现在我们把要搜索的关键字加上,只需要修改urlopen函数()里面的地址即可:
百度的:f = urllib.urlopen('http://www.baidu.com/s?wd=%CA%D3%CE%C0%CD%F8')
google中国的:f = urllib.urlopen('http://www.google.cn/search?hl=zh-CN&q=%E8%A7%86%E5%8D%AB%E7%BD%91&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f')
雅虎中国的:f = urllib.urlopen('http://search.cn.yahoo.com/search?ei=gbk&fr=fp-tab-web-ycn&pid=ysearch&source=yahoo_yhp_0706_search_button&p=%CA%D3%CE%C0%CD%F8')
运行,返回了不同的结果。百度和雅虎的都能够顺利通过。google却返回了一个错误页面:
上面页面的大概意思是没有权限该访问。奇怪了,把上面这个地址拷贝下来,直接输入到浏览器中,没有任何问题啊?难道google还有什么神秘武器?
于是把抓包的软件打开,直接抓取通过浏览器和通过Python访问的http协议报文。
这是通过浏览器访问的报文:
这是通过Python访问的报文:
我们可以看到,除了头部信息不太完整外,主要是“User-Agent”的内容不一样。联想到google公司是Python应用的大户,他们肯定想到会有人用Python脚本去刷引擎,估计在返回结果的时候做了判断,认为这种脚本访问是非法的。
三种引擎,同样的访问内容,只有google对自己做了保护。看样子搜索老大确实是计高一筹。
搞定google
通过对上面抓包内容的分析,发现只有http协议中“User-Agent”有差异导致google不能正常返回。换一种方法,构造一个象真正的浏览器发出的请求,会怎么样呢?
重新编写脚本,这次使用另外的方法:
import httplib, urllib
params = urllib.urlencode({})
headers = {
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
"Accept-Encoding": "gzip,deflate",
"Accept-Language": "zh-cn,en;q=0.7,en-us;q=0.3",
"Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
“User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13",
}
conn = httplib.HTTPConnection("www.google.cn")
conn.request("GET", "/search?hl=zh-CN&q=%E8%A7%86%E5%8D%AB%E7%BD%91&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f", params, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
#print data
conn.close()
再次运行并抓包,发现这次构造一个虚拟的firefox请求报文,访问成功!多次调试后发现,其实header的内容不是必须的,可以全部去掉。代码可以简化为:
import httplib, urllib
conn = httplib.HTTPConnection("www.google.cn")
conn.request("GET", "/search?hl=zh-CN&q=%E8%A7%86%E5%8D%AB%E7%BD%91&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f")
response = conn.getresponse()
print response.status, response.reason
data = response.read()
conn.close()
剩下的是体力活
好了,剩下的工作就是加上需要搜索的关键字,加上定时和循环的逻辑。都是体力活了。
目前的搜索引擎具有一些智能引导的功能,当输入一个关键词搜索后,返回的内容中会包括相关内容的搜索链接。比如,我们在google、百度中搜索“电影”,返回的页面中会有“免费电影”、“在线电影”、“电影下载”等多项搜索的链接。应该是引擎根据关键字作出了判断,把用户可能会感兴趣的相关内容展示给用户。
这个功能对网站的推广有一定的用处。比如,为了让网站的相关关键字发生联系,有一种网上介绍的推广方法就是用这些关键字的组合去大量地刷新引擎。通过这种人为的方式影响搜索引擎的返回结果。
好了,现在我们手里有了几十组关键字的组合,一开始的做法是发动公司相关人员打开网页进入搜索。再使用这些关键词去搜索。这种方法太依赖人,脚本程序最适合做这种重复的工作。当然,刷新的频率不能太高,以免被引擎列入黑名单。不过这种做法是否真的有效,只有做搜索引擎的人知道了。
好,我们的方案是使用Python,这是一种脚本语言,非常简单。几句话就写好了。比如:
import urllib
f = urllib.urlopen('http://www.google.com')
print f.read()
这几句话的意思是访问google的首页。现在我们把要搜索的关键字加上,只需要修改urlopen函数()里面的地址即可:
百度的:f = urllib.urlopen('http://www.baidu.com/s?wd=%CA%D3%CE%C0%CD%F8')
google中国的:f = urllib.urlopen('http://www.google.cn/search?hl=zh-CN&q=%E8%A7%86%E5%8D%AB%E7%BD%91&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f')
雅虎中国的:f = urllib.urlopen('http://search.cn.yahoo.com/search?ei=gbk&fr=fp-tab-web-ycn&pid=ysearch&source=yahoo_yhp_0706_search_button&p=%CA%D3%CE%C0%CD%F8')
运行,返回了不同的结果。百度和雅虎的都能够顺利通过。google却返回了一个错误页面:
上面页面的大概意思是没有权限该访问。奇怪了,把上面这个地址拷贝下来,直接输入到浏览器中,没有任何问题啊?难道google还有什么神秘武器?
于是把抓包的软件打开,直接抓取通过浏览器和通过Python访问的http协议报文。
这是通过浏览器访问的报文:
这是通过Python访问的报文:
我们可以看到,除了头部信息不太完整外,主要是“User-Agent”的内容不一样。联想到google公司是Python应用的大户,他们肯定想到会有人用Python脚本去刷引擎,估计在返回结果的时候做了判断,认为这种脚本访问是非法的。
三种引擎,同样的访问内容,只有google对自己做了保护。看样子搜索老大确实是计高一筹。
搞定google
通过对上面抓包内容的分析,发现只有http协议中“User-Agent”有差异导致google不能正常返回。换一种方法,构造一个象真正的浏览器发出的请求,会怎么样呢?
重新编写脚本,这次使用另外的方法:
import httplib, urllib
params = urllib.urlencode({})
headers = {
"Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
"Accept-Encoding": "gzip,deflate",
"Accept-Language": "zh-cn,en;q=0.7,en-us;q=0.3",
"Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
“User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13",
}
conn = httplib.HTTPConnection("www.google.cn")
conn.request("GET", "/search?hl=zh-CN&q=%E8%A7%86%E5%8D%AB%E7%BD%91&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f", params, headers)
response = conn.getresponse()
print response.status, response.reason
data = response.read()
#print data
conn.close()
再次运行并抓包,发现这次构造一个虚拟的firefox请求报文,访问成功!多次调试后发现,其实header的内容不是必须的,可以全部去掉。代码可以简化为:
import httplib, urllib
conn = httplib.HTTPConnection("www.google.cn")
conn.request("GET", "/search?hl=zh-CN&q=%E8%A7%86%E5%8D%AB%E7%BD%91&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f")
response = conn.getresponse()
print response.status, response.reason
data = response.read()
conn.close()
剩下的是体力活
好了,剩下的工作就是加上需要搜索的关键字,加上定时和循环的逻辑。都是体力活了。
相关文章推荐
- php连接到MySQL数据库服务器时三种主要的API:mysql,mysqli,pdo区别及联系
- 站内搜索(主要技术点:Luncene.Net搜索引擎核心,Log4Net:日志,定时框架:quartz.Net,Jquery,Json,AJAX)
- 站内搜索(主要技术点:Luncene.Net搜索引擎核心,Log4Net:日志,定时框架:quartz.Net,Jquery,Json,AJAX)
- 目前比较流行的ASP木马主要通过三种技术来进行对服务器的相关操作
- 当时遇到的主要难点在于TextView的内容不会刷新改变值,今天终于通过Timer和Handler实现了,分享给大家
- 开源搜索框架Lucene学习之分词器(3)——通过分词器源码学习抽象方法与虚方法的区别
- 浏览器三种刷新的区别
- 几个主要搜索引擎(Google和百度、雅虎)的站内搜索代码
- 目前比较流行的ASP木马主要通过三种技术来进行对服务器的相关操作
- FAST 和SharePoint搜索的主要区别
- 当时遇到的主要难点在于TextView的内容不会刷新改变值,今天终于通过Timer和Handler实现了,分享给大家
- 公司搜索--关于搜索引擎结果的析出(通过工商码实现)
- php连接到MySQL数据库服务器时三种主要的API:mysql,mysqli,pdo区别及联系
- 主要搜索引擎(Google和百度、雅虎)的站内搜索代码
- 通过up、down、enter键实现搜索结果选择功能(模拟搜索引擎)
- 当时遇到的主要难点在于TextView的内容不会刷新改变值,今天终于通过Timer和Handler实现了,分享给大家
- 搜索引擎的相关搜索(基于struts2框架通过关键字与后台的xml资源进行匹配实现)
- 向chrome添加自己网站的搜索引擎,可以通过地址栏键入tab进行搜索
- 基于BootStrap与PHP相结合的带有搜索框的ajax无刷新分页案例(支持三种搜索)
- String和StringBuffer的主要区别