网站内容抓取(整理一下用到的知识点和关键部分代码学习方法 )
优采云 发布时间: 2022-01-18 01:28网站内容抓取(整理一下用到的知识点和关键部分代码学习方法
)
组织一些最近的项目。总结几个用到的知识点和代码的关键部分,供大家学习交流。
1、爬虫爬取网页内容信息。可以使用 System.Net.WebRequest 和 webclient 等类来处理。
2、对于一些动态网页,链接信息是通过javascript动态生成的,以生成页面置信度。也可以分析传值的方式,把参数带入post(网站的大部分参数都是正则的)。如果不行,也可以使用webbrowser控件来模拟点击。或按值传递。
以网站为例。
部分代码如下:
//使用浏览器访问指定的网页。 address 是网页地址
private void Navigate(WebBrowser web,String address)
{
if (String.IsNullOrEmpty(address)) 返回;
if (address.Equals("about:blank")) return;
if (!address.StartsWith("http://")) 地址 = "http://" + 地址;
试试
{
web.Navigate(new Uri(address));
}
捕获 (System.UriFormatException)
{
返回;
}
}
由于需要爬取网页内容并在加载后提交参数,所以需要验证加载是否完成,即DocumentCompleted。在实际使用过程中,发现一个页面的加载过程中可能有多个DocumentCompleted,所以这里使用+1、-1方法来判断是否加载完成。
首先,在formload中绑定页面加载事件。
private void getCode3webBrowser_Load(object sender, EventArgs e)
{
string address = "http://www.aslan.com.cn/Code.aspx";
this.Navigate(webBrowser1, address);
webBrowser1.Navigated += new WebBrowserNavigatedEventHandler(webBrowser_Navigated);
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser_DocumentCompleted);
}
并定义标志计数
int count = 0;
然后在每次导航后 +1 标记
private void webBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
count++;
}
在每个DocumentCompleted中给count-1,最后当count=0时,表示页面加载完毕。可以进行页面信息处理等操作。
<p> <p> private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
count = count - 1;
string eventTarget = "dg_Code$ctl24$ctl";
if (0 == count && isComplete == false && j