C#网络爬虫和NoSQL数据库

3
我是一名IT学生,我们需要开发一个C#程序,从网站获取所有信息,然后使用NoSQL将信息添加到Oracle数据库中。我有几个问题,希望得到帮助。
我们决定使用Autotrader (http://www.autotrader.co.za/) 网站和 MongoDB 作为 NoSQL 数据库。
目前,我正在使用以下代码将信息从网站写入文本文件,但问题是它只能获取当前页面的信息,而不是整个网站的信息。
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
string sourceCode = sr.ReadToEnd();
sr.Close();
resp.Close();
return sourceCode;

我想知道如何在不跳转到其他网站的情况下,获取网站上所有链接和信息(不仅仅是当前页面)。
其次,在获取了网站所有信息后,我应该如何检索 MongoDB 等 Oracle 数据库的特定信息。

“C#网络爬虫和NoSQL数据库”不是一个问题。请阅读[询问]。 - Amit
I'm sorry, please provide me with the text to translate. - yohannist
你可能想看一下我的实现。https://dev59.com/o2kv5IYBdhLWcg3wpCXJ#16975398 - Misterhex
2个回答

0

我会使用现有的Web自动化库,例如Selenium WebDriver(这里有一个很好的例子http://seleniumdotnet.blogspot.co.uk/),来驱动网页 - 这些库允许您像用户一样查询和驱动网页。


0

我可以帮你解决问题的第一部分。你可以使用 HtmlAgilityPack 来查找你刚刚抓取的网页中的所有链接。 你可以从这个问题 HTML Agility Pack get all anchors' href attributes on page 中了解如何使用它。

基本上你需要做的是从响应流初始化一个 HttpDocument 然后执行相应操作。

   var nodes =
            _htmlDocument.DocumentNode.SelectNodes("//a[@href]");
        if(nodes != null)
           var links = nodes.Select(a => a.Attributes["href"])
                         .Select(a => a.Value).Distinct(); 

一旦您拥有URL列表,您可以递归调用scraper函数来处理每个URL。

这里有关于HtmlAgilityPack的更多信息。http://www.codeproject.com/Articles/659019/Scraping-HTML-DOM-elements-using-HtmlAgilityPack-H


谢谢您及时的回复Yohannes,我现在就开始做这个。 - Smiel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接