码迷,mamicode.com
首页 > Web开发 > 详细

使用HtmlAgilityPack批量抓取网页数据

时间:2017-04-13 11:08:32      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:ext   request   ring   validate   软件   取数   lin   循环   back   

【转】使用HtmlAgilityPack批量抓取网页数据

相关软件点击下载

登录的处理。因为有些网页数据需要登陆后才能提取。这里要使用ieHTTPHeaders来提取登录时的提交信息。

抓取网页

技术分享 HtmlAgilityPack.HtmlDocument htmlDoc;
技术分享
技术分享            
if (!string.IsNullOrEmpty(登录URL))
技术分享技术分享            
{
技术分享                htmlDoc 
= htmlWeb.Load(登录URL, 提交的用户验证信息, 获取数据的网页URL);
技术分享            }

技术分享            
else
技术分享技术分享            
{
技术分享                htmlDoc 
= htmlWeb.Load(获取数据的网页URL);
技术分享            }

技术分享
        

 

 

技术分享 ArrayList list = new ArrayList();
技术分享            list.add(
"//table/tr[1]/td");
技术分享            list.add(
"//table/tr[2]/td");
技术分享            
//获取循环的节点的xpath,比如://table/tr
技术分享
            HtmlNodeCollection repeatNodes = htmlDoc.DocumentNode.SelectNodes("//table/tr");
技术分享
技术分享            
//循环节点
技术分享
            foreach (HtmlNode node in repeatNodes)
技术分享技术分享            
{
技术分享                
//循环获取数据
技术分享
                foreach (string dataPath in list)
技术分享技术分享                
{
技术分享
技术分享                    HtmlNode dataNode 
= node.SelectSingleNode(list);
技术分享                    
if (dataNode != null)
技术分享技术分享                    
{
技术分享                        
string text = dataNode.InnerText;
技术分享                    }

技术分享
技术分享                }

技术分享            }

如果出现乱码,调整编码集为gb2312或者是utf-8

技术分享htmlWeb.DefaultEncoding = System.Text.Encoding.GetEncoding(strEncode);


-------------------------------------------------------------------------------------------

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.VisualStudio.TestTools.WebTesting;

using HtmlAgilityPack;

publicclassWebTest1Coded : WebTest

{

publicoverrideIEnumerator<WebTestRequest> GetRequestEnumerator()

{

WebTestRequest request1 = newWebTestRequest("http://www.microsoft.com/");

request1.ValidateResponse += newEventHandler<ValidationEventArgs>(request1_ValidateResponse);

yieldreturn request1;

}

void request1_ValidateResponse(object sender, ValidationEventArgs e)

{

//load the response body string as an HtmlAgilityPack.HtmlDocument

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(e.Response.BodyString);

//locate the "Nav" element

HtmlNode navNode = doc.GetElementbyId("Nav");

//pick the first <li> element

HtmlNode firstNavItemNode = navNode.SelectSingleNode(".//li");

//validate the first list item in the Nav element says "Windows"

e.IsValid = firstNavItemNode.InnerText == "Windows";

}

}

使用HtmlAgilityPack批量抓取网页数据

标签:ext   request   ring   validate   软件   取数   lin   循环   back   

原文地址:http://www.cnblogs.com/coky/p/6702734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!