如何设计定制的搜索引擎?

时间:2011-07-23 20:39:20

标签: c# api search-engine web-crawler

我想设计自己的搜索引擎应用程序,其中所有结果都会在一个页面上显示给用户(来自Google / Bing等),而Google则显示在不同页面上。

是否存在任何可以获得所有结果的API?

PS。我正在使用C#,并为此考虑IEnumerator接口?

5 个答案:

答案 0 :(得分:1)

如果您只是希望能够向用户提供搜索结果,那么搜索引擎提供的API可能就是您的选择。如前所述,有Bing's Live Search API(我没有使用,但看起来很好),还有Google's Web Search API。 另外,我发现Yahoo BOSS非常容易使用。但是,看起来BOSS现在是付费API - 所以根据您的预算/意图,它可能不合适。

Google的Web搜索API现已弃用,但仍应适用于少量查询 - 它是构建this number of results counter等工具的平台。它被Google Custom Search API取代,根据您的需要可能适用于您,也可能不适合您。我没有使用它,但它看起来很好,并且对于少量查询是免费的。

抓取然后解析搜索页面的问题是搜索引擎会定期更改搜索结果页面的底层html - 因此任何屏幕抓取方法都会非常脆弱。此外,大多数商业搜索引擎的terms of service禁止自动访问 - 如果您继续进行,它们可能会阻止您的爬虫。这两个问题可能就是为什么真正存在令人敬畏的第三方解析API的原因。

答案 1 :(得分:0)

检查NUTCH。这是你在找什么?

答案 2 :(得分:0)

Bing有一个开放的api http://www.bing.com/developers

谷歌给你一个api然后马上拿走它。 http://code.google.com/apis/websearch/docs/

谷歌api已被弃用,我认为他们还有另一个更为有限的。曾几何时,他们的API与Bing的相当。

对于您提到的确切场景,最好的办法是首先解析结果数,然后继续遍历页面。您还需要很好地处理错误,因为Google通常会关注它包含的结果数量。

答案 3 :(得分:0)

我在同一个项目工作。 Generate sitemap

 private void SubmitSitemap(string PortalName)
    {
        //PING SEARCH ENGINES TO LET THEM KNOW WE UPDATED OUR SITEMAP

        //resubmit to google

        System.Net.WebRequest reqGoogle = System.Net.WebRequest.Create("http://www.google.com/webmasters/tools/ping?sitemap=" + HttpUtility.UrlEncode("http://your path'" + PortalName + "'/sitemap.xml"));
        reqGoogle.GetResponse();

        //resubmit to ask

        System.Net.WebRequest reqAsk = System.Net.WebRequest.Create("http://submissions.ask.com/ping?sitemap=" + HttpUtility.UrlEncode("http://your path + "'/sitemap.xml"));
        reqAsk.GetResponse();

        //resubmit to yahoo

        System.Net.WebRequest reqYahoo = System.Net.WebRequest.Create("http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=YahooDemo&url=" + HttpUtility.UrlEncode("http://yourpath/sitemap.xml"));
        reqYahoo.GetResponse();

        //resubmit to bing

        System.Net.WebRequest reqBing = System.Net.WebRequest.Create("http://www.bing.com/webmaster/ping.aspx?siteMap=" + HttpUtility.UrlEncode("http://yourpath + "'/sitemap.xml"));
        reqBing.GetResponse();

    }


 生成robots.txt文件并将其放在根目录中。友好名称和其他问题也可用于此目的。

答案 4 :(得分:0)

您可以做的是从不同的API(bing / google等)获取数据,然后在一个流程中将其显示给用户。否则,抓取搜索引擎是完全非法的。

对于Google,您可以访问Google Custom Search API,或者如果您有要搜索Google Shopping API的产品。

对于Bing,有一个简单而直接的API。