我现在想写一个程序,输入关键字,比如“软件下载”,然后就会调用百度搜索这个关键字,同时能获取搜索的结果,比如有多少个搜索结果等等。
其实现在是想做一个排名查询软件,比如某个关键字,用程序不停的搜索,如果发现该关键字,那就获取结果,包括结果数量、排名等等。
谁有思路,可以提供一下,如果有类似的源码最好,有偿报答。
其实现在是想做一个排名查询软件,比如某个关键字,用程序不停的搜索,如果发现该关键字,那就获取结果,包括结果数量、排名等等。
谁有思路,可以提供一下,如果有类似的源码最好,有偿报答。
#region 同步通过GET方式发送数据
/// <summary>
/// 通过GET方式发送数据
/// </summary>
/// <param name="Url">url</param>
/// <param name="postDataStr">GET数据</param>
/// <param name="cookie">GET容器</param>
/// <returns></returns>
public string SendDataByGET(string Url, string postDataStr, ref CookieContainer cookie)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url +( postDataStr == "" ? "" : "?") + postDataStr);
if (cookie.Count == 0)
{
request.CookieContainer = new CookieContainer();
cookie = request.CookieContainer;
}
else
{
request.CookieContainer = cookie;
} request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close(); return retString;
}
#endregion
http://www.baidu.com/s?wd="+ 你的参数 +"&ie=utf-8
通过上面的URL调用SendDataByGET方法.即可得到你搜索数据的第一页.然后用正则分析所得到的数据..要第二页同样可以通过正则得到第二页链接.再继续调用那个方法即可....
#region 同步通过GET方式发送数据
/// <summary>
/// 通过GET方式发送数据
/// </summary>
/// <param name="Url">url</param>
/// <param name="postDataStr">GET数据</param>
/// <param name="cookie">GET容器</param>
/// <returns></returns>
public string SendDataByGET(string Url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "GET";
request.ContentType = "text/html;charset=UTF-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close(); return retString;
}
#endregion两参数没什么用..给你去掉..
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;namespace ConsoleDemo
{
public class Program
{
static void Main(string[] args)
{
BaiduSearch baidu = new BaiduSearch();
Console.WriteLine(baidu.Search("新浪"));
}
} class BaiduSearch
{
protected string uri = "http://www.baidu.com/s?wd=";
protected Encoding queryEncoding = Encoding.GetEncoding("gb2312");
protected Encoding pageEncoding = Encoding.GetEncoding("gb2312");
protected string resultPattern = @"(?<=找到相关结果[约]?)[0-9,]*?(?=个)"; public int Search(string word)
{
string html = string.Empty;
string uriString = uri + System.Web.HttpUtility.UrlEncode(word, queryEncoding);
try
{
html = WebFunc.GetHtml(uriString, pageEncoding);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
} int count = 0;
count = GetSearchCount(html); return count;
} public virtual int GetSearchCount(string html)
{
int result = 0;
string searchcount = string.Empty; Regex regex = new Regex(resultPattern);
Match match = regex.Match(html); if (match.Success)
{
searchcount = match.Value;
}
else
{
searchcount = "0";
} if (searchcount.IndexOf(",") > 0)
{
searchcount = searchcount.Replace(",", string.Empty);
} int.TryParse(searchcount, out result); return result;
}
} static class WebFunc
{
public static string GetHtml(string url)
{
return GetHtml(url, Encoding.UTF8);
} public static string GetHtml(string url, Encoding encoding)
{
WebRequest request;
request = WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response;
response = request.GetResponse();
return new StreamReader(response.GetResponseStream(), encoding).ReadToEnd();
}
}
}