c#抓取网页数据(封装一个简单总结(一):抓取网页文档分析 )
优采云 发布时间: 2021-11-03 18:15c#抓取网页数据(封装一个简单总结(一):抓取网页文档分析
)
这两天学习了爬虫的基础知识,这里简单总结一下。
获取的网页商品数据保存在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");
}