C#中的简单网络爬虫
我已经创建了一个简单的网络爬虫,但我想添加递归函数,以便打开的每个页面都可以获取此页面中的url,但我不知道我该怎么做,我还想包含线程来制作它在这里更快,这是我的代码
namespace Crawler { public partial class Form1 : Form { String Rstring; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { WebRequest myWebRequest; WebResponse myWebResponse; String URL = textBox1.Text; myWebRequest = WebRequest.Create(URL); myWebResponse = myWebRequest.GetResponse();//Returns a response from an Internet resource Stream streamResponse = myWebResponse.GetResponseStream();//return the data stream from the internet //and save it in the stream StreamReader sreader = new StreamReader(streamResponse);//reads the data stream Rstring = sreader.ReadToEnd();//reads it to the end String Links = GetContent(Rstring);//gets the links only textBox2.Text = Rstring; textBox3.Text = Links; streamResponse.Close(); sreader.Close(); myWebResponse.Close(); } private String GetContent(String Rstring) { String sString=""; HTMLDocument d = new HTMLDocument(); IHTMLDocument2 doc = (IHTMLDocument2)d; doc.write(Rstring); IHTMLElementCollection L = doc.links; foreach (IHTMLElement links in L) { sString += links.getAttribute("href", 0); sString += "/n"; } return sString; }
我修复了你的GetContent方法,如下所示,从抓取页面获取新链接:
public ISet GetNewLinks(string content) { Regex regexLink = new Regex("(?<= newLinks = new HashSet (); foreach (var match in regexLink.Matches(content)) { if (!newLinks.Contains(match.ToString())) newLinks.Add(match.ToString()); } return newLinks; }
更新
修复:正则表达式应该是regexLink。 感谢@shashlearner指出这一点(我的错误)。
我使用Reactive Extension创建了类似的东西。
https://github.com/Misterhex/WebCrawler
我希望它可以帮助你。
Crawler crawler = new Crawler(); IObservable observable = crawler.Crawl(new Uri("https://www.codinghorror.com/")); observable.Subscribe(onNext: Console.WriteLine, onCompleted: () => Console.WriteLine("Crawling completed"));
以下包括答案/建议。
我相信您应该使用dataGridView
而不是textBox
因为当您在GUI中查看它时,更容易看到找到的链接(URL)。
你可以改变:
textBox3.Text = Links;
至
dataGridView.DataSource = Links;
现在提出问题,你没有包括:
using System. "'s"
哪些被使用,因为如果我能得到它们将无法理解它将是值得赞赏的。
从设计的角度来看,我写了几个webcrawler。 基本上,您希望使用堆栈数据结构实现深度优先搜索。 您也可以使用广度优先搜索,但您可能会遇到堆栈内存问题。 祝好运。
上述就是C#学习教程:C#中的简单网络爬虫分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/950978.html