C# 爬虫简单教程

1、使用第三方类库 HtmlAgilityPack

官方网址:https://html-agility-pack.net/?z=codeplex

// 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、自己封装的类库

 /// <summary>
  /// 下载HTML帮助类
  /// </summary>
  public static class LoadHtmlHelper
  {
    /// <summary>
    /// 从Url地址下载页面
    /// </summary>
    /// <param name="url"></param>
    /// <returns></returns>
    public async static ValueTask<HtmlDocument> 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);
      }

    }
  }

3、自己写的爬虫案例,爬取的网站https://www.meitu131.com/

数据存储层没有实现,懒得写了,靠你们喽,我是数据暂时存在了文件中
GitHub地址:https://github.com/ZhangQueque/quewaner.Crawler.git

以上就是C# 爬虫简单教程的详细内容,更多关于c# 爬虫的资料请关注我们其它相关文章!

(0)

相关推荐

  • c#爬虫爬取京东的商品信息

    前言 在一个小项目中,需要用到京东的所有商品ID,因此就用c#写了个简单的爬虫. 在解析HTML中没有使用正则表达式,而是借助开源项目HtmlAgilityPack解析HTML. 下面话不多说了,来一起看看详细的介绍吧 一.下载网页HTML 首先我们写一个公共方法用来下载网页的HTML. 在写下载HTML方法之前,我们需要去查看京东网页请求头的相关信息,在发送请求时需要用到. public static string DownloadHtml(string url, Encoding encod

  • C#爬虫通过代理刷文章浏览量

    1.如何维护代理IP库? 想要使用代理IP,那就必须有一个一定数量.足够有效的代理ip库,在学习阶段,随便玩玩那就只能从免费的代理IP网站上抓取,没有一定数量的代理刷文章流浪量非常慢,首先就是要维护好自己的代理Ip库 之前用过的西刺代理.66ip比较靠谱,西祠好像有反扒,遇到过一次,不知道是西祠网站的问题还是反扒的策略,这两个网站每分钟抓取的能用的代理大概有2,3个,这已经算的上比较客观的了, data5u.快代理.ip3366网页端更新的非常少,而且有效性比较低,快代理抓取网页还必须设置Use

  • C#简单爬虫案例分享

    本文实例为大家分享了C#简单爬虫案例,供大家参考,具体内容如下 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program

  • 用C#做网络爬虫的步骤教学

    如今代码圈很多做网络爬虫的例子,今天小编给大家分享的是如何用C#做网络爬虫.注意这次的分享只是分享思路,并不是一整个例子,因为如果要讲解一整个例子的话,牵扯的东西太多. 1.新建一个控制台程序,这个相信大家都懂的 2.建好以后,打开主程序文件,导入发送http请求的库,这里用的是System.NET 3.编写发送http请求的方法,如下所示:首先实例化WebClient,然后设置头信息,其次转化参数为字节数据,最后调用UploadData方法进行发送. 4.接下来调用我们写的发送http请求的方

  • C#多线程爬虫抓取免费代理IP的示例代码

    这里用到一个HTML解析辅助类:HtmlAgilityPack,如果没有网上找一个增加到库里,这个插件有很多版本,如果你开发环境是使用VS2005就2.0的类库,VS2010就使用4.0,以此类推..........然后直接创建一个控制台应用,将我下面的代码COPY替换就可以运行,下面就来讲讲我两年前做爬虫经历,当时是给一家公司做,也是用的C#,不过当时遇到一个头痛的问题就是抓的图片有病毒,然后系统挂了几次.所以抓网站图片要注意安全,虽然我这里没涉及到图片,但是还是提醒下看文章的朋友. clas

  • C#制作多线程处理强化版网络爬虫

    上次做了一个帮公司妹子做了爬虫,不是很精致,这次公司项目里要用到,于是有做了一番修改,功能添加了网址图片采集,下载,线程处理界面网址图片下载等. 说说思路:首相获取初始网址的所有内容 在初始网址采集图片 去初始网址采集链接 把采集到的链接放入队列 继续采集图片,然后继续采集链接,无限循环 还是上图片大家看一下, 处理网页内容抓取跟网页网址爬取都做了改进,下面还是大家来看看代码,有不足之处,还请之处! 网页内容抓取HtmlCodeRequest, 网页网址爬取GetHttpLinks,用正则去筛选

  • C# 利用代理爬虫网页的实现方法

    C# 利用代理爬虫网页 实现代码: // yanggang@mimvp.com // http://proxy.mimvp.com // 2015-11-09 using System; using System.IO; using System.Net; using System.Text; namespace ConsoleApplication1 { class Program { public static void Main(string[] args) { System.Net.We

  • 利用C#实现网络爬虫

    网络爬虫在信息检索与处理中有很大的作用,是收集网络信息的重要工具. 接下来就介绍一下爬虫的简单实现. 爬虫的工作流程如下 爬虫自指定的URL地址开始下载网络资源,直到该地址和所有子地址的指定资源都下载完毕为止. 下面开始逐步分析爬虫的实现. 1. 待下载集合与已下载集合 为了保存需要下载的URL,同时防止重复下载,我们需要分别用了两个集合来存放将要下载的URL和已经下载的URL. 因为在保存URL的同时需要保存与URL相关的一些其他信息,如深度,所以这里我采用了Dictionary来存放这些UR

  • C#网络爬虫代码分享 C#简单的爬取工具

    公司编辑妹子需要爬取网页内容,叫我帮忙做了一简单的爬取工具 这是爬取网页内容,像是这对大家来说都是不难得,但是在这里有一些小改动,代码献上,大家参考 private string GetHttpWebRequest(string url) { HttpWebResponse result; string strHTML = string.Empty; try { Uri uri = new Uri(url); WebRequest webReq = WebRequest.Create(uri);

  • 基于C#实现网络爬虫 C#抓取网页Html源码

    最近刚完成一个简单的网络爬虫,开始的时候很迷茫,不知道如何入手,后来发现了很多的资料,不过真正能达到我需要,有用的资料--代码很难找.所以我想发这篇文章让一些要做这个功能的朋友少走一些弯路. 首先是抓取Html源码,并选择<ul class="post_list">  </ul>节点的href:要添加using System.IO;using System.Net; private void Search(string url) { string rl; Web

  • 利用C#实现最基本的小说爬虫示例代码

    前言 作为一个新手,最近在学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站. 第一次搞爬虫,涉及到了网络协议,正则表达式,弄得手忙脚乱跑起来效率还差劲,慢慢改吧.下面话不多说了,来一起看看详细的介绍吧. 爬的目标:http://www.166xs.com/xiaoshuo/83/83557/ 一.先写HttpWebRequest把网站扒下来 这里有几个坑,大概说下: 第一个就是记得弄个代理IP爬网站,第一次忘了弄代理然后ip就被封了..... 第二个就是

  • 基于C#实现网页爬虫

    本文实例为大家分享了基于C#实现网页爬虫的详细代码,供大家参考,具体内容如下 HTTP请求工具类: 功能: 1.获取网页html 2.下载网络图片 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Form

随机推荐