天涯文章采集器

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

using System;

using System.Collections.Generic;

using System.Text;

using lintTools;

using System.Web;

using System.Net;

using System.IO;

using System.Text.RegularExpressions;

using System.Collections;



namespace ty

{

    class Program

    {

        static void Main(string[] args)

        {

            SortedList[] arrTitle;

            string content="",writer="",title="",nextUrl="";

            LintSys.WriteLine("********************天涯文章下载大师v0.1 Copyright By lintg.200801***********",ConsoleColor.Yellow);

            LintSys.WriteLine("-s:单篇文章地址,默认取文章名称为下载文件名称,默认下载多页", ConsoleColor.Yellow);



            LintSys.WriteLine("-u:下载页面的首页,默认取天涯舞文弄墨首页", ConsoleColor.Yellow);

            LintSys.WriteLine("-p:下载页数,默认取100页", ConsoleColor.Yellow);

            LintSys.WriteLine("-d:下载目录,默认取当前目录", ConsoleColor.Yellow);

            LintSys.WriteLine("-f:过滤文件大小,默认过滤4000字节以下文件", ConsoleColor.Yellow);



            string downMode = "m",url="http://cache.tianya.cn/pub/list/0/culture.shtml",downDir="./",sUrl="";

            int downPage = 100,filterBytes=4000;

            Regex regex=new Regex(@"-(?<paramName>[supdf]):(?<paramValue>/S*?)___FCKpd___0quot;,RegexOptions.Singleline);

            for(int i=0;i<args.Length;i++)

            {

              //  Console.WriteLine(args[i]);

                Match m=regex.Match(args[i]);

                if(m.Success)

                {

                    //Console.WriteLine(m.Result("${paramName}") + m.Result("${paramValue}"));

                    switch(m.Result("${paramName}"))

                    {

                        case "s":

                            downMode="s";

                            sUrl=m.Result("${paramValue}");

                            Console.WriteLine(sUrl);

                            break;

                        case "u":

                            url=m.Result("${paramValue}");

                            break;

                        case "p":

                            try{

                                downPage=int.Parse(m.Result("${paramValue}").ToString());

                            }

                            catch

                            {

                                Console.WriteLine("参数错误,-p:页数");

                            }

                            break;

                        case "d":

                            downDir=m.Result("${paramValue}").ToString();

                            break;

                            case "f":

                             try{

                                     filterBytes=int.Parse(m.Result("${paramValue}").ToString());

                                }

                            catch

                             {

                                Console.WriteLine("参数错误,-f:过滤文件大小");

                            }

                            break;



                    }



                }

            }

            

            switch(downMode)

            {

                case "s":

                     GetAuthor(sUrl,ref writer,ref title);

                     content = GetArticle(sUrl,writer);

                     LintSys.WriteFile(downDir+title + ".txt", content);

                    break;

                default:

                    

             

            for(int j=0;j<downPage;j++)

            {

                LintSys.WriteLine("第" + (j + 1).ToString() + "页:"+url, ConsoleColor.Red);

                arrTitle = GetTitle(url, ref nextUrl);

               // return;

                for (int i = 1; i < arrTitle.Length-1; i++)

                {                    

                    LintSys.WriteLine((j + 1).ToString() + "-"+i.ToString()+",下载文章:"+arrTitle[i]["title"].ToString()+",作者:"+arrTitle[i]["writer"],ConsoleColor.Green);

                     content = GetArticle( arrTitle[i]["url"].ToString(), arrTitle[i]["writer"].ToString());

                     if(content.Length>filterBytes)

                        LintSys.WriteFile(arrTitle[i]["title"].ToString() + ".txt", content,FileMode.Create);

                     else

                         Console.WriteLine("文件:"+content.Length.ToString()+"<"+filterBytes.ToString()+",被过滤");

                }



                if (nextUrl != null)

                {

                    url = nextUrl;

                }

                else

                {

                    break;

                }

            }

            break;



            }



           

            

         

            //content = GetArticle("http://cache.tianya.cn/publicforum/Content/culture/1/245493.shtml", "不愿当好人");

            //LintSys.WriteFile("write.txt", content);



        }

        static bool GetAuthor(string url,ref string writer,ref string title)

        {

            CookieContainer cc = new CookieContainer();

            string content = Net.GetContent(url, ref cc);

            Regex regex = new Regex("<TITLE>(?<title>.*?)</TITLE>",RegexOptions.Singleline);

            Match m = regex.Match(content);

            if (m.Success)

            {

                title = m.Result("${title}");

            }

            regex = new Regex(@"作者:<a .*?>(?<writer>.*?)</a>", RegexOptions.Singleline);

            m = regex.Match(content);

            if (m.Success)

            {

                writer = m.Result("${writer}");

            }

            return true;

        }



        static string GetArticle(string url,string writer)

        {

            string content,filterContent="",replyContent;

            int j=0;

            CookieContainer cc = new CookieContainer();

            while (true)

            {

                Console.WriteLine("连接" + url + ".....");

                content = Net.GetContent(url, ref cc);

                Regex regex = new Regex(writer.Replace("*","//*") + "</a>.*?</table>(?<content>.*?)(<TABLE)", RegexOptions.Singleline);

                MatchCollection mc = regex.Matches(content);

                LintSys.WriteLine("匹配回帖:" + mc.Count.ToString(), ConsoleColor.Yellow);

           //     Console.WriteLine(mc.Count.ToString() + regex.ToString());

                                

                    for (int i = 0; i < mc.Count; i++)

                    {

                        replyContent=mc[i].Result("${content}").Trim();

                        if (replyContent.Length>50&&replyContent.Substring(0, 2) != "作者"  || replyContent.Length > 100&&replyContent.Substring(0, 2) == "作者" )  //回帖字数超过30认为有效

                        {

                            filterContent += "(" + (j++).ToString() + ")/n" + replyContent;

                        }

                    }

                

                regex = new Regex(@"<a /S*? href=(?<url>/S*?)>下一页</a>",RegexOptions.Singleline);

                Match m = regex.Match(content);

                if (!m.Success)

                    break;

                else

                    url = m.Result("${url}");

            }

            LintSys.WriteLine("下载完成....",ConsoleColor.DarkGreen);

            return Trans.ReplaceHtml(filterContent);

        }

        



        static SortedList[] GetTitle(string url,ref string nextUrl)

        {

            SortedList[] title;

            string content = "";

            CookieContainer cc = new CookieContainer();

            content = Net.GetContent(url, ref cc);

           // Console.WriteLine(content);

            LintSys.WriteFile("log.txt", content);

            //Regex regex = new Regex(@"<a href='(?<url>http://cache.tianya.cn/publicforum/S*)'.*?>(?<title>.*?)<.*?vwriter=(?<writer>)'.*?", RegexOptions.Singleline);

            Regex regex = new Regex(@"<a href='(?<url>http://cache.tianya.cn/publicforum/content/S*)'.*?>(?<title>.*?)<.*?vwriter=(?<writer>.*?)'", RegexOptions.Singleline);

            MatchCollection mc = regex.Matches(content);

           // Console.WriteLine(mc.Count.ToString());

           // return null;

            title = new SortedList[mc.Count ];

            for (int i = 0; i < mc.Count-1; i++) 

            {

                title[i] = new SortedList();

                title[i]["url"] = mc[i].Result("${url}");

                title[i]["title"] = (new Regex(Reg.dirStr)).Replace(mc[i].Result("${title}"),"");

                title[i]["writer"] = mc[i].Result("${writer}");

                //Console.WriteLine(mc[i].Result("${url}") + mc[i].Result("${title}") + mc[i].Result("${writer}"));

            }

            title[0] = new SortedList();

            regex=new Regex(@"<a href=(?<url>/S*)?>下一页</a>",RegexOptions.Singleline);

            Match m = regex.Match(content);

            if (m.Success)

            {

                nextUrl = m.Result("${url}");               

            }

            return title;

        }

    }

}

http://info95.vicp.net/info95/non-cgi/usr/5/5_6.rar

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

内容概要:本文提出了一种基于非合作博弈理论的居民负荷分层调度模型,并结合双层鲸鱼优化算法(Two-level Whale Optimization Algorithm)进行高效求解,模型与算法均通过Matlab代码实现。研究针对电力系统中居民侧用电负荷的复杂调度问题,引入非合作博弈机制刻画各用户之间的利益竞争关系,实现负荷的分层优化分配;同时设计双层优化架构,上层优化资源配置,下层模拟用户自主决策行为,提升了模型的实用性与合理性。通过智能优化算法求解多层级、非凸非线性的博弈模型,有效提高了调度方案的收敛性与全局寻优能力,适用于现代智能电网中的需求侧管理与能源优化场景。; 适合人群:具备电力系统基础理论知识和Matlab编程能力,从事智能电网、能源优化调度、需求侧管理、博弈论应用等方向的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于居民区电力负荷的分层优化调度系统设计与仿真分析;②为非合作博弈在多主体能源系统建模中的应用提供方法论支持;③利用双层鲸鱼算法解决具有嵌套结构的复杂双层优化问题,提升求解效率与调度方案的可行性。; 阅读建议:建议读者结合提供的Matlab代码深入理解模型构建逻辑与算法实现流程,重点关注博弈模型的效用函数设计、纳什均衡求解思路以及双层优化结构的迭代机制,宜配合实际用电数据开展复现实验以验证模型有效性与鲁棒性。
内容概要:本文围绕基于自适应神经模糊推理系统(ANFIS)智能控制的可再生能源微电网功率管理系统展开研究,结合Simulink仿真实现,深入探讨了微电网中功率的智能调控与经济机组组合调度问题。通过引入ANFIS控制,有效应对风能、光伏等可再生能源出力的波动性与不确定性,提升系统运行的稳定性与电能质量。研究内容涵盖微电网多源协调控制策略、功率平衡管理、优化调度模型构建及仿真验证,实现了对分布式电源、储能系统和负荷的协同优化,兼顾经济性与可靠性目标,并通过仿真平台验证了所提方法的有效性与优越性。; 适合人群:具备电力系统、自动化或新能源相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网能量管理、智能控制、能源优化等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高比例可再生能源接入场景下的微电网能量管理系统研发与教学实践;②为实现微电网功率稳定控制与经济高效运行提供先进的智能控制解决方案;③支撑高水平学术论文复现、科研课题攻关及实际工程项目的仿真验证与方案优化。; 阅读建议:建议结合提供的Simulink模型与相关代码进行动手实践,重点关注ANFIS控制的设计流程、规则库构建与参数调优方法,并通过与传统PID或MPC控制策略的对比实验,深入理解其在动态响应与鲁棒性方面的优势。同时可进一步拓展文中提出的优化调度逻辑,应用于多目标、多约束的复杂实际应用场景中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值