Google Spider .NET
与竞争对手搜索您的关键词。
引言
正则表达式引擎。
背景
这段代码能够搜索 google.com 上的关键词并返回排名结果。它还支持多关键词搜索以及竞争对手列表,用于与您的域名进行比较。
该项目由三个不同的部分构建:
- 核心 (core):这是逻辑文件,包含来自 GUI 层的支持函数。它还能移除对特定 GUI 的依赖,因此您可以将其定制为任何应用程序类型(Web 应用程序、WPF)。
- 关键词匹配 (keys match):GUI 层,所有的检查和验证都在这里进行。
- keysmatch_setup:应用程序的安装项目。
您能从这篇文章中学到什么?
- 使用 Webclient 对象
- 使用 正则表达式 机制
- 保存文件和设置
- 日志查看器
- 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
类型。它启动搜索过程的新实例,以根据页面搜索值不影响程序的为主线程。
结论
我希望看到这个项目的更多版本。
享受编码吧。
别忘了评论。:)