日期:2014-05-20 浏览次数:21289 次
bool flagExit = true;//标记是否退出,true为不退出,false为退出
List<Alexa> list = new List<Alexa>();
int index = 0;//官网下标
int indexChinaz = 0;//Chinaz下标
bool startRecord = false;//标记是否从官网开始采集
bool startChinaz = false;//标记是否从Chinaz开始采集
bool IsRecording = false;//标记是否开始采集,仅当前时间为13点时,为True
StringBuilder sb = new StringBuilder();
HtmlDocument document = null;
private void Form1_Load(object sender, EventArgs e)
{
//窗体加载后,暂停2秒
System.Threading.Thread.Sleep(2000);
list.Add(new Alexa { DomainName = "她时代", DomainUrl = "smartshe.com" });
list.Add(new Alexa { DomainName = "elle", DomainUrl = "ellechina.com" });
list.Add(new Alexa { DomainName = "onlylady", DomainUrl = "onlylady.com" });
list.Add(new Alexa { DomainName = "pclady", DomainUrl = "pclady.com.cn" });
list.Add(new Alexa { DomainName = "yoka", DomainUrl = "yoka.com" });
list.Add(new Alexa { DomainName = "贝太厨房", DomainUrl = "bettyskitchen.com.cn" });
list.Add(new Alexa { DomainName = "都市主妇", DomainUrl = "herschina.com" });
list.Add(new Alexa { DomainName = "嘉人", DomainUrl = "marieclairechina.com" });
list.Add(new Alexa { DomainName = "女友", DomainUrl = "ny1988.com" });
list.Add(new Alexa { DomainName = "瑞丽", DomainUrl = "rayli.com.cn" });
list.Add(new Alexa { DomainName = "时尚", DomainUrl = "trends.com.cn" });
list.Add(new Alexa { DomainName = "悦己", DomainUrl = "self.com.cn" });
timer1.Enabled = true;
webBrowser1.Navigate(new Uri(@"about:blank"));
tboCurUrl.Text = "about:blank";
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)//WebBrowser加载完成事件
{
if ((e.Url.ToString() == webBrowser1.Url.ToString() || webBrowser1.ReadyState == WebBrowserReadyState.Complete) && startChinaz)
{
SetIPPv();
GetAlexaFromChinaz(indexChinaz);
}
if ((e.Url.ToString() == webBrowser1.Url.ToString() || webBrowser1.ReadyState == WebBrowserReadyState.Complete) && startRecord)
{
//设置Alexa信息
SetAlexaInfo();
start(index);
}
}
/// <summary>
/// 从官网读取Alexa流量信息
/// </summary>
/// <param name="num"></param>
private void start(int num)//根据网站地址访问Alexa官网
{
if (num < list.Count)
{
timer1.Enabled = false;
IsRecording = true;
//暂停三秒
System.Threading.Thread.Sleep(1000);
webBrowser1.Navigate(new Uri(@"http://cn.alexa.com/siteinfo/" + list[num].DomainUrl + "#trafficstats"));
tboCurUrl.Text = "http://cn.alexa.com/siteinfo/" + list[num].DomainUrl + "#trafficstats";
}
else
{
startRecord = false;
startChinaz = true;//标记开始读取IP、PV值
GetAlexaFromChinaz(0);
}
}
/// <summary>
/// 访问Chinz,以获取IP和PV值
/// </summary>
/// <param name="num"></param>
private void GetAlexaFromChinaz(int num)//根据网站地址访问站长之家
{
if (num < list.Count)
{
//暂停五秒
System.Threading.Thread.Sleep(5000);
webBrowser1.Navigate(new Uri(@"http://alexa.chinaz.com/?domain=" + list[num].DomainUrl));
tboCurUrl.Text = "http://alexa.chinaz.com/?domain=" + list[num].DomainUrl;
}
else
{
//自动执行导出方法
//ExportToExcel();
ExportToSql();
timer1.Enabled = true;
startRecord = false;
startChinaz = false;
index = 0;
indexChinaz = 0;
webBrowser1.Navigate(new Uri(@"http://www.smartshe.com"));
tboCurUrl.Text = "http://www.smartshe.com";
}
}
/// <summary>
/// 设置集合中各对象的IP和PV值
/// </summary>
private void SetIPPv()//设置集合中各对象的IP和PV值
{
document = webBrowser1.Document;
list[indexChinaz].IpNum = document.GetElementById("IpNum").InnerText == "相关数据不充分,无法统计。" ? "-" : document.GetElementById("IpNum").InnerText.Substring(2).Replace(",", "");
list[indexChinaz].PvNum = document.GetElementById("PvNum").InnerText == "相关数据不充分,无法统计。" ? "-" : document.GetElementById("PvNum").InnerText.Substring(2).Replace(",", "");
indexChinaz += 1;
}
/// <summary>
/// 设置集合中各对象的排名信息
/// </summary>
private void SetAlexaInfo()//设置集合中各对象的排名信息
{
document = webBrowser1.Document;
sb.Remove(0, sb.ToString().Length);
sb.Append(document.GetElementById("rank").InnerText);
//string ranks = document.GetElementById("rank").InnerText;
//使用正则匹配得出(昨日排名、最近七天、最近七天)
Match m = Regex.Match(sb.ToString(), @"昨日([\d,]+)", RegexOptions.IgnoreCase);
if (m.Success)
{
list[index].TodayRank = m.Groups[1].Value.Replace(",", "");
}
else
{
list[index].TodayRank = "-";
}
m = Regex.Match(sb.ToString(), @"最近七天平均([\d,]+)", RegexOptions.IgnoreCase);
if (m.Success)
{
list[index].WeekRank = m.Groups[1].Value.Replace(",", "");
}
else
{
list[index].WeekRank = "-";
}
m = Regex.Match(sb.ToString(), @"最近一月平均([\d,]+)", RegexOptions.IgnoreCase);
if (m.Success)
{
list[index].MonthRank = m.Groups[1].Value.Replace(",", "");
}
else
{
list[index].MonthRank = "-";
}
//综合排名
sb.Remove(0, sb.ToString().Length);
sb.Append(document.GetElementById("siteStats").InnerText);
//string rank = document.GetElementById("siteStats").InnerText;
m = Regex.Match(sb.ToString().Replace("\r\n", ""), @"([\d,]+)网站流量排名", RegexOptions.IgnoreCase);
if (m.Success)
{
list[index].Rank = m.Groups[1].Value.Replace(",", "");
}
else
{
list[index].Rank = "-";
}
sb.Remove(0, sb.ToString().Length);
sb.Append(document.GetElementById("trafficstats").InnerText);
//string china = document.GetElementById("trafficstats").InnerText;
m = Regex.Match(sb.ToString(), @"([\d,]+) China", RegexOptions.IgnoreCase);
if (m.Success)
{
list[index].ChinaRank = m.Groups[1].Value.Replace(",", "");
}
else
{
list[index].ChinaRank = "-";
}
index += 1;
}
/// <summary>
/// 将结果插入至数据库
/// </summary>
private void ExportToSql()//导入数据库
{
foreach (Alexa alexa in list)
{
DBHelp.ExecuteNonQuery(alexa);
}
}
private void GoUrl()//根据URL访问网站
{
if (tboCurUrl.Text.Trim().StartsWith("http://www."))
{
webBrowser1.Navigate(new Uri(@"" + tboCurUrl.Text.Trim()));
}
else if (tboCurUrl.Text.Trim().StartsWith("www."))
{
webBrowser1.Navigate(new Uri(@"http://" + tboCurUrl.Text.Trim()));
}
else if (tboCurUrl.Text.Trim().StartsWith("http://"))
{
webBrowser1.Navigate(new Uri(@"" + tboCurUrl.Text.Trim()));
}
else
{
webBrowser1.Navigate(new Uri(@"http://" + tboCurUrl.Text.Trim()));
}
}
/// <summary>
/// 最小化
/// </summary>
private void NormalToMinimized()//最小化
{
this.Visible = false;
this.WindowState = FormWindowState.Minimized;
notifyIcon1.Visible = true;
}
/// <summary>
/// 恢复正常窗体大小
/// </summary>
private void MinimizedToNormal()//恢复正常
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
notifyIcon1.Visible = false;
}