65.9K
CodeProject 正在变化。 阅读更多。
Home

Google Spider .NET

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.80/5 (4投票s)

2009年7月8日

CPOL

2分钟阅读

viewsIcon

34944

downloadIcon

1030

与竞争对手搜索您的关键词。

引言

正则表达式引擎。

背景

这段代码能够搜索 google.com 上的关键词并返回排名结果。它还支持多关键词搜索以及竞争对手列表,用于与您的域名进行比较。

该项目由三个不同的部分构建:

  • 核心 (core):这是逻辑文件,包含来自 GUI 层的支持函数。它还能移除对特定 GUI 的依赖,因此您可以将其定制为任何应用程序类型(Web 应用程序、WPF)。
  • 关键词匹配 (keys match):GUI 层,所有的检查和验证都在这里进行。
  • keysmatch_setup:应用程序的安装项目。

schema.jpg

您能从这篇文章中学到什么?

  1. 使用 Webclient 对象
  2. 使用 正则表达式 机制
  3. 保存文件和设置
  4. 日志查看器
  5. Setup 项目

传输对象

这些对象在各层之间传输,并在项目中保持参数的语言。

public class client_obj
{
string domain;
public string Domain { get { return domain; } set { domain = value; } }
ArrayList keyword = new ArrayList();
public ArrayList KeyWord { get { return keyword; } set { keyword = value; }}
ArrayList competiters = new ArrayList();
public ArrayList Competiters { get { return competiters; } set { competiters = value; } }
}
public class keyword_obj
{
string keyword;
public string KeyWord { get { return keyword; } set { keyword = value; } }
int position;
public int Position { get { return position; } set { position = value; } }
int page;
public int Page { get { return page; } set { page = value; } }
}
public class competitors
{
string domain;
public string Domain { get { return domain; } set { domain = value; } }

ArrayList keyword = new ArrayList();
public ArrayList KeyWord { get { return keyword; } set { keyword = value; } }
}
  • competiters:代表竞争对手的值
  • keyword_obj:代表关键词的值
  • client_obj:包含客户端搜索的值

使用 HtmlParse 函数

该程序基于简单的 正则表达式 函数,该函数通过从 WebClient 对象获取 HTML 页面来创建返回搜索结果的 ArrayList。

private ArrayList HtmlParse(string html)
{
Match m;
ArrayList LinkArray = new ArrayList();
string HRefPattern = "<h3 class=r><a href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))";
m = Regex.Match(html, HRefPattern, RegexOptions.IgnoreCase);
while (m.Success)
{
string TempLink = m.Groups[1].Value;
LinkArray.Add(TempLink);
m = m.NextMatch();
}
return LinkArray;
}

HrefPattern 变量包含正则表达式语言(要在 string 中搜索什么;如您所见,我正在 H3 标签类中查找域名地址。在 Google 中,它代表页面上的结果地址。)

Web 客户端函数

此函数创建与站点的连接,并获取包含从请求站点生成的全部 HTML 的 string

private string RuunerGoogleHtml(string key, string RunStep)
{
WebClient Client = new WebClient();
Client.Encoding = Encoding.GetEncoding("windows-1255");
 
string fixUrl = "http://www.google.com/search?q=" + 
	key + "&hl=iw&as_qdr=all&num=10&start=" + RunStep + "&sa=N";
string html = Client.Encoding.GetString(Client.DownloadData(fixUrl));
Client.Dispose();
return html;
}

fixurl 包含 Google 中的搜索参数。您可以在进行搜索时在浏览器的地址框中看到它。

日志引擎

该应用程序为任何搜索创建日志文件。您可以保存输出文件以供历史记录,并保存您的搜索设置。

有关函数的更多信息,请参阅类 file_manager.cs

GUI 层

它从控件获取用户的输入,并通过将请求参数发送到 核心层 来发出请求。

private void btn_start_Click(object sender, EventArgs e)
{
if (chk_google.Checked)
{
if (txb_client_domain.Text != "http://")
{
if (txb_keyword.Text != "")
{
lbl_Status.Text = "";
myClient = null;
MyKeyWords = null;
myClient = new client_obj();
MyKeyWords = new ArrayList();
SaveInput();
SetGoogle_progress_bar();
StopStatus = false;
googleWorker = new BackgroundWorker();
googleWorker.WorkerSupportsCancellation = true;
googleWorker.DoWork += new DoWorkEventHandler(googleWorker_DoWork);
googleWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
					(googleWorker_RunWorkerCompleted);
googleWorker.RunWorkerAsync();
}
else
{
lbl_Status.Text = "Enter keywords for search";
}
}
else
{
lbl_Status.Text = "Insert domain for search";
}
}
else
{
lbl_Status.Text = "Active your search engine";
}
}
void googleWorker_DoWork(object sender, DoWorkEventArgs e)
{
for (int a = 0; a < MyKeyWords.Count; a++)
{
if (!StopStatus)
{
dal_regex myRegex = new dal_regex();
keyword_obj mykey = new keyword_obj();
mykey = (keyword_obj)MyKeyWords[a];
for (int b = 0; b < TotalPage2Search; b++)
{
MethodInvoker Invoker = delegate
{
//lbl_Status.Text = "Search: " + tempKey.KeyWord + 
	" Page Position: " + b.ToString() + " Hit: " + hit + "- your domain result";
myClient = myRegex.CatchValues(myClient, mykey.KeyWord, b);
try
{
google_progress.Value = google_progress.Value + 1;
}
catch
{
google_progress.Value = google_progress.Maximum;
}
google_progress.Refresh();
lbl_page.Text = (b + 1).ToString();
lbl_Status.Text = "In progress...";
lbl_page.Refresh();
lbl_key.Text = mykey.KeyWord;
lbl_key.Refresh();
};
this.Invoke(Invoker);
}
}
}

googleworker 是属于 线程 系列的 BackGroundWorker 类型。它启动搜索过程的新实例,以根据页面搜索值不影响程序的为主线程。

结论

我希望看到这个项目的更多版本。

享受编码吧。

别忘了评论。:)
© . All rights reserved.