c#抓取网页数据(封装一个简单总结(一):抓取网页文档分析 )

优采云 发布时间: 2021-11-03 18:15

  c#抓取网页数据(封装一个简单总结(一):抓取网页文档分析

)

  这两天学习了爬虫的基础知识,这里简单总结一下。

  获取的网页商品数据保存在Excel表格中,效果如下:

  

  使用Jumony Core引擎,是一个非常强大且近乎完美的HTML解析引擎,支持css3选择器,直接抓取网页文档进行分析,并根据HTTP头自动识别。

  一个抓取博客园站点导航顶部信息的例子:

  var documents = new JumonyParser().LoadDocument("http://www.cnblogs.com/").Find("#site_nav_top").FirstOrDefault();

  太强大了。如果您熟悉 CSS,则无需手动编写大量可读性差的正则表达式来匹配和获取数据。

  封装一个简单的操作库:

   public class BaseAnalyzer

{

///

/// 根据Url加载html文档对象

///

///

///

protected virtual IHtmlDocument LoadDocument(string url)

{

return new JumonyParser().LoadDocument(url);

}

///

/// 查询指定url中指定选择器的元素集

///

///

///

///

protected virtual List QueryHtmlElements(string url, string selector, Func predicate = null)

{

var elementsCollection = new List();

IEnumerable elements = LoadDocument(url).Find(selector);

if (predicate != null)

{

elements = elements.Where(predicate);

}

if (elements != null)

elementsCollection.AddRange(elements);

return elementsCollection;

}

///

/// 分析Html文档,获取指定元素集第一个元素的文本内容

///

/// html文档对象

/// 选择器

/// 文本内容

protected virtual string GetFirstElementText(IHtmlContainer html, string selector)

{

var findList = html.Find(selector);

var result = findList.FirstOrDefault();

return result == null ? string.Empty : result.InnerText();

}

///

/// 分析Html文档,获取指定元素集的文本内容

///

/// html文档对象

/// 选择器

/// 自定义处理获取到的元素集,若没有,就返回第一个元素的文本内容

///

protected virtual string GetElementsText(IHtmlContainer html, string selector, Func func)

{

var findList = html.Find(selector);

if (func != null)

return func(findList);

return GetFirstElementText(html, selector);

}

}

  获取产品名称的示例:

   private ProductInfo AnalyzeProductInfo(string detailUrl)

{

var product = new ProductInfo();

//详情页html文档对象

var html = LoadDocument(detailUrl);

product.ProductName = GetFirstElementText(html, ".goods_particulars h1");

}

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线