为了简单方便,这里使用WebBrowser来玩一把,使用WebBrowser我们要注意以下几点:
第一:因为WebBrowser在System.Windows.Forms 中,属于winform控件,所以我们要设置STAThread标记。
第二:winform是事件驱动的,而Console并不会去响事件,所有事件在windows的消息队列中等待执行,为了不让程序假死,
我们需要调用DoEvents方法转让控制权,让操作系统执行其他的事件。
第三:WebBrowser中的内容,我们需要用DomDocument来查看,而不是DocumentText。
这里当时考虑 转化成XML 直接通过XLINQ读取XML数据,但感觉这样做风险很大。 万一页面代码不规范,转化成XML很容易就exception了
所以考虑 直接用一个<tr></tr>做为一个整体保存下来;
然后通过htppHandler URL转向。 OK
/要抓取数据的页面路径
string url = "https://www.sywebsoft.com/";
//将页面上的数据转换为HTML
string html = Method.GetHtmlData(url);
// txt_content.Text = html;
//找到需要的数据匹配正则 (?<name>.+?)
string regex = @"<font size=""2"">(?<name>.+?)</td>";
Regex listRegex = new Regex(regex, RegexOptions.Multiline | RegexOptions.IgnoreCase);
//得到匹配的数据集合
MatchCollection mc = listRegex.Matches(html);
JCheng.Model.School Model = new JCheng.Model.School();
//将得到的字符串分割存进数组
string[] str = txt_content.Text.Substring(0, txt_content.Text.Length - 1).Replace("<br />", "").Split(,);
//数据每六个为一个model类 ,如下循环添加入库。
for (int i = 0; i < str.Length - 1; )
{
Model.sName = str[i];
Model.sAddress = str[i + 1];
Model.sPostCode = str[i + 2];
Model.sPhone = str[i + 3];
Model.sEmail = str[i + 4];
Model.sClass = str[i + 5];
new JCheng.BLL.School().Add(Model);
i += 6;
}