用http的get方法,构造要查询的url,get下来,分析结果页面即可
首先是构造url,以下是一些示例,主要看清楚?号后面的参数所代表的意思即可:
http://www.google.cn/search?num=100&&q=%E5%85%83%E6%90%9C%E7%B4%A2&start=10
http://www.baidu.com/s?wd=%D4%AA%CB%D1%CB%F7&rn=100&pn=10 //第二页pn
http://www.yahoo.cn/s?p=%E5%85%83%E6%90%9C%E7%B4%A2&b=10 //第二页b
http://search.yahoo.com/search?n=100&p=%E5%85%83%E6%90%9C%E7%B4%A2&b=101
http://cnweb.search.live.com/results.aspx?q=%E5%85%83%E6%90%9C%E7%B4%A2&first=51 //第二页first=51
http://p.zhongsou.com/p?w=%D4%AA%CB%D1%CB%F7&b=3 //b=3表示第三页
http://www.soso.com/q?w=%D4%AA%CB%D1%CB%F7&num=20&pg=1 //第一页,每页20个
第二步是解释搜索结果页面:
<meta http-equiv="content-type" content="text/html;charset=gb2312">
Google
搜索结果个数的字符串前缀:约有<b> //获取个数用字符串定位的方式
搜索结果开始的标签:<div id=res> //也可以用字符串定位的方式,要准确就用查找标签定位的方式
各个搜索结果的开始标签:<div class=g> //字符串定位的方式
搜索结果的url在第一个<a target=_blank class=l>标签里头
搜索结果的标题在<a></a>的标签之间
搜索结果的摘要在接下来的<table><tr><td>标签里头直到<b>...<b><br>
搜索结果的重写的url在<b>...<b><br>之后的<span>标签里头,格式为:url,一个空格,网页大小
搜索结果的网页快照在接下来的<a class=fl>的标签里头,属性中有url,标签之间有网页快照文字
接下来还有类似网页等,都在<a class=fl>标签里头
各个搜索结果的结束标签是</td></tr></table></div>
......................
相关搜索的开始标签:<p class=e>
在接下来的各个<a></a>标签之间的内容就是相关搜索的内容
直到标签<br clear=all>就可以结束了
Baidu
搜索结果个数的字符串前缀:<td align=\"righ,在定位该字符串后,直到</td>,即在这个td标签之内含有的字符串包含相关网页数和用时
搜索结果开始的标签:<DIV id=ScriptDiv></DIV>
各个搜索结果的开始标签:<table
搜索结果的url在第一个<a target=_blank class=l>标签里头
搜索结果的标题在<a></a>的标签之间,以<br>标签结束
搜索结果的摘要以<br>开始直到下一个<br>标签
接下来的一行(<br>换行)的font标签中有搜索结果url的重写,一个空格,网页大小,网页时间
在接下来会有一些<a>标签如百度快照,直到又一个<br>
然后搜索结果的结束标签</table>
.........................
导航条的开始标签:<br clear=all>
导航条的内容在开始标签之后的<div class="p"></div>标签之间
相关搜索在接下来的<div>标签之间的各个<a>标签之内
其他考虑:对于字符串的匹配可以利用kmp,注意到匹配搜索结果各部分的时候所用到的模式字符串的最大前缀字符串最多是一个字符,这样可以避免求取最大前缀字符串从而提高效率;如果要精确地匹配还需要弄两个函数,一个用来构造标签,一个用来读取标签之间的文本。