我的第一個網路爬蟲 C#版 福利 程式員專車

来源:https://www.cnblogs.com/GuoRL/archive/2018/01/22/8328329.html
-Advertisement-
Play Games

最近在自覺python,看到了知乎上一篇文章(https://www.zhihu.com/question/20799742),在福利網上爬視頻。。。 由是我就開始跟著做了,但答主給的例子是基於python2.x的,而我開始學的是3.x,把print用法改了以後還是有很多模塊導入不了,新手又不知道該 ...


最近在自覺python,看到了知乎上一篇文章(https://www.zhihu.com/question/20799742),在福利網上爬視頻。。。

由是我就開始跟著做了,但答主給的例子是基於python2.x的,而我開始學的是3.x,把print用法改了以後還是有很多模塊導入不了,新手又不知道該怎麼解決。

於是,為了學(shang)習(che),我就把其中的一段代碼用C#寫了一次。在加了一些延時的情況下,一會兒硬碟就被占用了3個多g了。。。同學們,要註意身體啊

下麵貼出代碼。。代碼中故意留了幾個bug,避免非程式員上車

class Program
    {
        static void Main(string[] args)
        {
            var baseString = "http://w*w.46ek.c*m/view/{0}.html";
            Regex regex = new Regex(@"http://m4.26ts.com/[.0-9-a-zA-Z]*.mp4");
            WebClient wc = new WebClient();


            uint startIndex = ReadStartIndex();
            uint loop = ReadLoopLen();

            for (int i = 0; i < lop; i++)
            {
                var subUrl = string.Format(baseString, startIndex + i);
                WebRequest wReq = System.Net.WebRequest.Create(subUrl)

                try
                {
                    WebResponse wResp = wReq.GetResponse();
                    Stream respStream = wResp.GetResponseStream();

                    using (StreamReader reader = new StreamReader(respStream, Encoding.GetEncoding("GB18030")))
                    {
                        var htmlString = reader.ReadToEnd();

                        Match m = regex.Match(htmlString);
                        if (m.Success)
                        {
                            DownloadFile(wc, m.Value, string.Format("{0}.mp4", startIndex + i));
                        }
                    }
                }
                catch (Exception exc)
                {
                    Console.WriteLine("Error : {0}", exc.Message);
                }

                Thread.Sleep(5);
            }
            
        }

        private static uint ReadStartIndex()
        {
            while (true)
            {
                Console.Write("Set start index :");

                string line = Console.ReadLine();

                uint index = 0;

                if (UInt32.TryParse(line, out index))
                {
                    Console.WriteLine("Start index setted : "+ index);
                    return index;
                }

                Thread.Sleep(500);
            }
        }

        private static uint ReadLoopLen()
        {
            while (true)
            {
                Console.Write("Set loop len :");

                string line = Console.ReadLine();

                uint index = 0;

                if (UInt32.TryParse(line, out index))
                {
                    Console.WriteLine("Loop len setted : " + index);
                    return index;
                }

                Thread.Sleep(500);
            }
        }

        private static void DownloadFile(WebClient wc, string url, string localname)
        {
            Console.WriteLine("Downloading file {1} to {2}", url, localname);

            wc.DownloadFile(url, localname);

            Console.WriteLine("File {0} download completed!", localname);
        }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 眾所周知在EF 6 及以前的版本中,是支持懶載入(Lazy Loading)的,可惜在EF Core 並不支持,必須使用 方法來支持導航屬性的數據載入。不過現在EF Core的開發團隊打算恢復對這一功能的支持(目前還未發佈,不過可以在Github上面下載進行測試)。 懶載入 懶載入也可以叫做按需載入 ...
  • 最近開發幾個小項目,需要把結果寫到txt文件裡面,並且按照時間進行分文件,由於對於效率要求較高,所以採用 生產者和消費者 模型來進行寫出文本,線程中只需要添加隊列就立即返回,而不需要等待寫文件的時間 然後再寫了個字典來維護: 在實際使用添加WirteItem,設置好輸出目錄就行了: ...
  • 相較於社區其他主流的AOP框架,Dora.Interception在Interceptor提供了完全不同的編程方式。我們並沒有為Interceptor定義一個介面,正是因為不需要實現一個預定義的介面,Dora.Interception下的Interceptor定義變得更加自由。除此之外,Interc... ...
  • 概述 什麼是反射 概述 什麼是反射 Reflection,中文翻譯為反射。 這是.Net中獲取運行時類型信息的方式,.Net的應用程式由幾個部分:‘程式集(Assembly)’、‘模塊(Module)’、‘類型(class)’組成,而反射提供一種編程的方式,讓程式員可以在程式運行期獲得這幾個組成部分 ...
  • 今天從VS2015升級到VS2017, 一個.net Core 的project出現build failed,提示The "IsFileSystemCaseSensitive" parameter is not supported by the "FindConfigFiles" task. 發現指 ...
  • 使用 報錯:Sys.WebForms.PageRequestManagerParserErrorException:無法分析從伺服器收到的消息 使用 依舊報錯:Sys.WebForms.PageRequestManagerParserErrorException:無法分析從伺服器收到的消息 後,嘗試 ...
  • 在顯示層用如下代碼,把需要存儲的值放到線程擁有者里,代碼如下 在Service層調用的時候如下: 請問這樣把Seesion共用到Service可行嗎? ...
  • 需要添加引用 Microsoft.Office.Interop.Excel 有興趣的可以看看 https://www.cnblogs.com/junshijie/p/5292087.html 這篇文章,裡面有更詳細如何操作EXCEL。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...