网页源代码抓取工具(为了简单方便,这里使用WebBrowser来玩一把,我们要注意 )
优采云 发布时间: 2021-12-14 11:11网页源代码抓取工具(为了简单方便,这里使用WebBrowser来玩一把,我们要注意
)
为了简单方便,这里我们使用WebBrowser来玩,使用WebBrowser时要注意以下几点:
第一:因为WebBrowser是System.Windows.Forms中的winform控件,所以需要设置STAThread标签。
第二:Winform是事件驱动的,Console不响应事件,所有事件都在windows消息队列中等待执行,为了防止程序假死,
我们需要调用DoEvents方法来转移控制权,让操作系统执行其他事件。
第三:WebBrowser中的内容,我们需要使用DomDocument查看,而不是DocumentText。
当时考虑过直接通过XLINQ转换成XML,读取XML数据,但是觉得这样做风险很大。如果页面代码不规范,很容易转换成XML,会例外
所以考虑直接用一个整体来保存;
然后通过 htppHandler URL 重定向。好的
/要抓取数据的页面路径
string url = "https://www.sywebsoft.com/";
//将页面上的数据转换为HTML
string html = Method.GetHtmlData(url);
// txt_content.Text = html;
//找到需要的数据匹配正则 (?.+?)
string regex = @"(?.+?)";
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;
}