C#爬虫,让你不再觉得神秘

// From File 从文件获取html信息
var doc = new HtmlDocument();
doc.Load(filePath);

// From String 从字符串获取html信息
var doc = new HtmlDocument();
doc.LoadHtml(html);

// From Web 从网址获取html信息
var url = “http://html-agility-pack.net/”;
var web = new HtmlWeb();
var doc = web.Load(url);
1.1、这里介绍一下最后一种用法
var web = new HtmlWeb();
var doc = web.Load(url);
在 web 中我们还可以设置cookie、headers等信息,来处理一些特定的网站需求,比如需要登陆等。

1.2 用法解释
网页在你查看网页源代码之后只是一段字符串,而爬虫所做的就是在这堆字符串中,查询到我们想要的信息,挑选出来。
以往的筛选方法:正则 (太麻烦了,写起来有些头疼)
HtmlAgilityPack 支持通过XPath来解析我们需要的信息。

1.2.1 在哪里找XPath?
网页右键检查

通过XPath就可以准确获取你想要元素的全部信息。

1.2.2 获取选中Html元素的信息?
获取选中元素

var web = new HtmlWeb();
var doc = web.Load(url);
var htmlnode = doc?.DocumentNode?.SelectSingleNode("/html/body/header")
获取元素信息

htmlnode.InnerText;
htmlnode.InnerHtml;
//根据属性取值
htmlnode?.GetAttributeValue(“src”, “未找到”)
2、自己封装的类库
///
/// 下载HTML帮助类
///
public static class LoadHtmlHelper
{
///
/// 从Url地址下载页面
///
///
///
public async static ValueTask LoadHtmlFromUrlAsync(string url)
{
HtmlWeb web = new HtmlWeb();
return await
web?.LoadFromWebAsync(url);
}

    /// <summary>
    /// 获取单个节点扩展方法
    /// </summary>
    /// <param name="htmlDocument">文档对象</param>
    /// <param name="xPath">xPath路径</param>
    /// <returns></returns>
    public static HtmlNode GetSingleNode(this HtmlDocument htmlDocument, string xPath)
    {
      return  htmlDocument?.DocumentNode?.SelectSingleNode(xPath);
    }

    /// <summary>
    /// 获取多个节点扩展方法
    /// </summary>
    /// <param name="htmlDocument">文档对象</param>
    /// <param name="xPath">xPath路径</param>
    /// <returns></returns>
    public static HtmlNodeCollection GetNodes(this HtmlDocument htmlDocument, string xPath)
    {
        return htmlDocument?.DocumentNode?.SelectNodes(xPath);
    }

 

    /// <summary>
    /// 获取多个节点扩展方法
    /// </summary>
    /// <param name="htmlDocument">文档对象</param>
    /// <param name="xPath">xPath路径</param>
    /// <returns></returns>
    public static HtmlNodeCollection GetNodes(this HtmlNode htmlNode, string xPath)
    {
        return htmlNode?.SelectNodes(xPath);
    }


    /// <summary>
    /// 获取单个节点扩展方法
    /// </summary>
    /// <param name="htmlDocument">文档对象</param>
    /// <param name="xPath">xPath路径</param>
    /// <returns></returns>
    public static HtmlNode GetSingleNode(this HtmlNode htmlNode, string xPath)
    {
        return htmlNode?.SelectSingleNode(xPath);
    }

    /// <summary>
    /// 下载图片
    /// </summary>
    /// <param name="url">地址</param>
    /// <param name="filpath">文件路径</param>
    /// <returns></returns>
    public async static ValueTask<bool> DownloadImg(string url ,string filpath)
    {
        HttpClient httpClient = new HttpClient();
        try
        {
            var bytes = await httpClient.GetByteArrayAsync(url);
            using (FileStream fs = File.Create(filpath))
            {
                fs.Write(bytes, 0, bytes.Length);
            }
            return File.Exists(filpath);
        }
        catch (Exception ex)
        {
         
            throw new Exception("下载图片异常", ex);
        }
        
    }
}
视频学习资料无偿自取:
一节课快速认识人工智能必备语言:python

http://www.makeru.com.cn/live/detail/1635.html?s=143793
python零基础全套
http://www.makeru.com.cn/course/details/1804.html?s=143793

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用C#来编写爬虫并抓取网站后台数据,您可以借助一些库和框架来实现。以下是一个基本的步骤指南: 1. 首先,您需要使用C#的网络请求库,例如HttpClient,来发送HTTP请求到目标网站。您可以使用GET或POST方法发送请求,并传递必要的参数。 2. 接下来,您可以使用HTML解析库,例如HtmlAgilityPack,来解析网页内容。这样您可以提取出所需的数据,如文本、链接、表格等等。 3. 如果目标网站需要登录或进行身份验证,您可能需要模拟登录过程。通过发送POST请求,将用户名和密码等凭据提交给登录页面,并在后续请求中使用Cookie来维持登录状态。 4. 在获取到所需数据后,您可以将其保存到数据库中或进行进一步处理和分析。您可以使用C#的数据库访问库,如Entity Framework或SqlClient,来连接和操作数据库。 5. 最后,为了确保爬取过程的合法性和稳定性,建议添加适当的延时和错误处理机制。遵守网站的robots.txt文件中的规定,并设置合理的请求间隔,以免给目标网站造成过大的负担。 请注意,在进行网络爬虫时,应该遵守法律法规和网站的使用规则,确保以合法和道德的方式使用爬虫技术。此外,如果目标网站有反爬虫机制,您可能需要采取一些反反爬虫的策略来应对。 希望以上信息对您有所帮助!如果您有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值