最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C#實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲

 更新時(shí)間:2016年03月24日 17:01:42   作者:秋荷雨翔  
這篇文章主要為大家詳細(xì)介紹了基于C#實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了基于C#實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的詳細(xì)代碼,供大家參考,具體內(nèi)容如下

HTTP請(qǐng)求工具類:

功能:

1、獲取網(wǎng)頁(yè)html

2、下載網(wǎng)絡(luò)圖片

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.Forms;

namespace Utils
{
  /// <summary>
  /// HTTP請(qǐng)求工具類
  /// </summary>
  public class HttpRequestUtil
  {
    /// <summary>
    /// 獲取頁(yè)面html
    /// </summary>
    public static string GetPageHtml(string url)
    {
      // 設(shè)置參數(shù)
      HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
      request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)";
      //發(fā)送請(qǐng)求并獲取相應(yīng)回應(yīng)數(shù)據(jù)
      HttpWebResponse response = request.GetResponse() as HttpWebResponse;
      //直到request.GetResponse()程序才開(kāi)始向目標(biāo)網(wǎng)頁(yè)發(fā)送Post請(qǐng)求
      Stream responseStream = response.GetResponseStream();
      StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
      //返回結(jié)果網(wǎng)頁(yè)(html)代碼
      string content = sr.ReadToEnd();
      return content;
    }

    /// <summary>
    /// Http下載文件
    /// </summary>
    public static void HttpDownloadFile(string url)
    {
      int pos = url.LastIndexOf("/") + 1;
      string fileName = url.Substring(pos);
      string path = Application.StartupPath + "\\download";
      if (!Directory.Exists(path))
      {
        Directory.CreateDirectory(path);
      }
      string filePathName = path + "\\" + fileName;
      if (File.Exists(filePathName)) return;

      // 設(shè)置參數(shù)
      HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
      request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)";
      request.Proxy = null;
      //發(fā)送請(qǐng)求并獲取相應(yīng)回應(yīng)數(shù)據(jù)
      HttpWebResponse response = request.GetResponse() as HttpWebResponse;
      //直到request.GetResponse()程序才開(kāi)始向目標(biāo)網(wǎng)頁(yè)發(fā)送Post請(qǐng)求
      Stream responseStream = response.GetResponseStream();

      //創(chuàng)建本地文件寫入流
      Stream stream = new FileStream(filePathName, FileMode.Create);

      byte[] bArr = new byte[1024];
      int size = responseStream.Read(bArr, 0, (int)bArr.Length);
      while (size > 0)
      {
        stream.Write(bArr, 0, size);
        size = responseStream.Read(bArr, 0, (int)bArr.Length);
      }
      stream.Close();
      responseStream.Close();
    }
  }
}

多線程爬取網(wǎng)頁(yè)代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Utils;

namespace 爬蟲
{
  public partial class Form1 : Form
  {
    List<Thread> threadList = new List<Thread>();
    Thread thread = null;

    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      DateTime dtStart = DateTime.Now;
      button3.Enabled = true;
      button2.Enabled = true;
      button1.Enabled = false;
      int page = 0;
      int count = 0;
      int personCount = 0;
      lblPage.Text = "已完成頁(yè)數(shù):0";
      int index = 0;

      for (int i = 1; i <= 10; i++)
      {
        thread = new Thread(new ParameterizedThreadStart(delegate(object obj)
        {
          for (int j = 1; j <= 10; j++)
          {
            try
            {
              index = (Convert.ToInt32(obj) - 1) * 10 + j;
              string pageHtml = HttpRequestUtil.GetPageHtml("http://tt.mop.com/c44/0/1_" + index.ToString() + ".html");
              Regex regA = new Regex("<a[\\s]+class=\"J-userPic([^<>]*?)[\\s]+href=\"([^\"]*?)\"");
              Regex regImg = new Regex("<p class=\"tc mb10\"><img[\\s]+src=\"([^\"]*?)\"");
              MatchCollection mc = regA.Matches(pageHtml);
              foreach (Match match in mc)
              {
                int start = match.ToString().IndexOf("href=\"");
                string url = match.ToString().Substring(start + 6);
                int end = url.IndexOf("\"");
                url = url.Substring(0, end);
                if (url.IndexOf("/") == 0)
                {
                  string imgPageHtml = HttpRequestUtil.GetPageHtml("http://tt.mop.com" + url);
                  personCount++;
                  lblPerson.Invoke(new Action(delegate() { lblPerson.Text = "已完成條數(shù):" + personCount.ToString(); }));
                  MatchCollection mcImgPage = regImg.Matches(imgPageHtml);
                  foreach (Match matchImgPage in mcImgPage)
                  {
                    start = matchImgPage.ToString().IndexOf("src=\"");
                    string imgUrl = matchImgPage.ToString().Substring(start + 5);
                    end = imgUrl.IndexOf("\"");
                    imgUrl = imgUrl.Substring(0, end);
                    if (imgUrl.IndexOf("http://i1") == 0)
                    {
                      try
                      {
                        HttpRequestUtil.HttpDownloadFile(imgUrl);
                        count++;
                        lblNum.Invoke(new Action(delegate()
                        {
                          lblNum.Text = "已下載圖片數(shù)" + count.ToString();
                          DateTime dt = DateTime.Now;
                          double time = dt.Subtract(dtStart).TotalSeconds;
                          if (time > 0)
                          {
                            lblSpeed.Text = "速度:" + (count / time).ToString("0.0") + "張/秒";
                          }
                        }));
                      }
                      catch { }
                      Thread.Sleep(1);
                    }
                  }
                }
              }
            }
            catch { }
            page++;
            lblPage.Invoke(new Action(delegate() { lblPage.Text = "已完成頁(yè)數(shù):" + page.ToString(); }));

            if (page == 100)
            {
              button1.Invoke(new Action(delegate() { button1.Enabled = true; }));
              MessageBox.Show("完成!");
            }
          }
        }));
        thread.Start(i);
        threadList.Add(thread);
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      button1.Invoke(new Action(delegate()
      {
        foreach (Thread thread in threadList)
        {
          if (thread.ThreadState == ThreadState.Suspended)
          {
            thread.Resume();
          }
          thread.Abort();
        }
        button1.Enabled = true;
        button2.Enabled = false;
        button3.Enabled = false;
        button4.Enabled = false;
      }));
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
      foreach (Thread thread in threadList)
      {
        thread.Abort();
      }
    }

    private void button3_Click(object sender, EventArgs e)
    {
      foreach (Thread thread in threadList)
      {
        if (thread.ThreadState == ThreadState.Running)
        {
          thread.Suspend();
        }
      }
      button3.Enabled = false;
      button4.Enabled = true;
    }

    private void button4_Click(object sender, EventArgs e)
    {
      foreach (Thread thread in threadList)
      {
        if (thread.ThreadState == ThreadState.Suspended)
        {
          thread.Resume();
        }
      }
      button3.Enabled = true;
      button4.Enabled = false;
    }
  }
}

截圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • C#加密知識(shí)整合 (AES,MD5,RSA,SHA256)

    C#加密知識(shí)整合 (AES,MD5,RSA,SHA256)

    這篇文章主要介紹了c#對(duì)于加密的一點(diǎn)整合 (AES,MD5,RSA,SHA256),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C#定義的MP3播放類實(shí)例

    C#定義的MP3播放類實(shí)例

    這篇文章主要介紹了C#定義的MP3播放類,實(shí)例分析了C#操作多媒體音頻文件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • ToLua框架下C#與Lua代碼的互調(diào)操作

    ToLua框架下C#與Lua代碼的互調(diào)操作

    這篇文章主要介紹了ToLua框架下C#與Lua代碼的互調(diào)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Unity 按鈕添加OnClick事件操作

    Unity 按鈕添加OnClick事件操作

    這篇文章主要介紹了Unity 按鈕添加OnClick事件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Unity實(shí)現(xiàn)虛擬搖桿

    Unity實(shí)現(xiàn)虛擬搖桿

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • c#獲取相同概率隨機(jī)數(shù)的算法代碼

    c#獲取相同概率隨機(jī)數(shù)的算法代碼

    這篇文章主要介紹了c#獲取相同概率隨機(jī)數(shù)的算法代碼,有需要的朋友可以參考一下
    2014-01-01
  • C#中ExcelDataReader的具體使用

    C#中ExcelDataReader的具體使用

    ExcelDataReader是一個(gè)輕量級(jí)的可快速讀取Excel文件中數(shù)據(jù)的工具,本文主要介紹了C#中ExcelDataReader的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • c#數(shù)組詳解

    c#數(shù)組詳解

    這篇文章主要介紹了c#數(shù)組的一些相關(guān)知識(shí),需要的朋友可以參考下
    2007-05-05
  • C#文件合并的方法

    C#文件合并的方法

    這篇文章主要介紹了C#文件合并的方法,實(shí)例分析了C#基于FileStream操作文件合并的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • c# 獲取數(shù)據(jù)庫(kù)中所有表名稱的方法

    c# 獲取數(shù)據(jù)庫(kù)中所有表名稱的方法

    在很多情況下我們需要將指定的數(shù)據(jù)庫(kù)中的所有表都列出來(lái)。在使用c#進(jìn)行軟件開(kāi)發(fā)時(shí),我們有哪些方法可是實(shí)現(xiàn)這個(gè)目的呢?本人對(duì)此進(jìn)行概要的總結(jié),有以下6中方式可以實(shí)現(xiàn)這個(gè)目的。
    2010-02-02

最新評(píng)論

武胜县| 栾川县| 唐山市| 浦江县| 泉州市| 仁布县| 抚松县| 抚顺市| 兴安县| 泰和县| 泗水县| 文化| 博客| 手机| 漾濞| 上高县| 宝兴县| 兴文县| 陆川县| 益阳市| 滕州市| 莆田市| 霸州市| 辽阳县| 河北区| 阿克苏市| 岳阳市| 潮安县| 汽车| 祁阳县| 静安区| 横山县| 北碚区| 凤城市| 平远县| 建始县| 德兴市| 当雄县| 峡江县| 青川县| 班玛县|