2011-03-03 4 views
5

में Google खोज से लिंक प्राप्त करें मैं Google में सी # के माध्यम से एक साधारण खोज प्रोग्राम करने की कोशिश कर रहा हूं जो मेरी पसंद की एक क्वेरी चलाएगा और पहले 50 लिंक पुनर्प्राप्त करेगा। एक समान उपकरण \ सही एपीआई की पूरी तरह से खोज करने के बाद मुझे एहसास हुआ कि उनमें से अधिकतर अप्रचलित हैं। मेरी पहली कोशिश "सरल HttpWebRequest" बनाना था और "href =" के लिए प्राप्त वेब रेस्पॉन्स स्कैन करना था जो सभी (अनावश्यकता) और बहुत निराशाजनक नहीं था। मेरे पास Google एपीआई है लेकिन मुझे यकीन नहीं है कि इस उद्देश्य के लिए इसका उपयोग कैसे किया जाए, हालांकि मुझे पता है कि प्रति दिन 1000 सीमा है।सी #

गिल

+0

मेरे पास एक प्रोजेक्ट है जो Google को अनुरोध भेजता है और प्रतिक्रिया देता है। Google के मार्कअप परिवर्तनों का पालन करने के लिए हमें प्रति वर्ष कई बार पार्सिंग मॉड्यूल को फिर से लिखना होगा। यह बेकार है। हालांकि इसे आमतौर पर पार्सिंग कोड को ठीक करने के लिए केवल कुछ घंटे लगते हैं। – Snowbear

+0

@Snowbear, क्या आप पार्सिंग के लिए HtmlAgility पैक का उपयोग कर रहे हैं? –

+0

@ शिव, नहीं, यह विरासत का हिस्सा है, जो अभी भी नियमित अभिव्यक्तियों का उपयोग करता है। धन्यवाद, इसका जिक्र करने के लिए, मैं उस समय देखता हूं कि हम उस दुःस्वप्न को फिर से लिखेंगे। – Snowbear

उत्तर

1

आप इस मार्ग आप अपने पार्सिंग के लिए HtmlAgility पैक का उपयोग करना चाहिए जा रहे हैं। हालांकि Google के एपीआई का उपयोग करना बेहतर होगा। इस पोस्ट i need to know which of my url is indexed on google

HtmlAgility पैक का उपयोग कर के लिए कुछ कोड के रूप में देखते हैं, मैं Finding links on a Web page

5

यहाँ कूट चल रहा है अपने ब्लॉग पर एक पोस्ट किया है .. जाहिर है आप उचित रूप और कुछ सरल नियंत्रण जोड़ना होगा ...

using HtmlAgilityPack; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.IO; 
using System.Linq; 
using System.Net; 
using System.ServiceModel.Syndication; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using System.Xml; 

namespace Search 
{ 
    public partial class Form1 : Form 
    { 
     // load snippet 
     HtmlAgilityPack.HtmlDocument htmlSnippet = new HtmlAgilityPack.HtmlDocument(); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btn1_Click(object sender, EventArgs e) 
     { 
      listBox1.Items.Clear(); 
      StringBuilder sb = new StringBuilder(); 
      byte[] ResultsBuffer = new byte[8192]; 
      string SearchResults = "http://google.com/search?q=" + txtKeyWords.Text.Trim(); 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(SearchResults); 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

      Stream resStream = response.GetResponseStream(); 
      string tempString = null; 
      int count = 0; 
      do 
      { 
       count = resStream.Read(ResultsBuffer, 0, ResultsBuffer.Length); 
       if (count != 0) 
       { 
        tempString = Encoding.ASCII.GetString(ResultsBuffer, 0, count); 
        sb.Append(tempString); 
       } 
      } 

      while (count > 0); 
      string sbb = sb.ToString(); 

      HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument(); 
      html.OptionOutputAsXml = true; 
      html.LoadHtml(sbb); 
      HtmlNode doc = html.DocumentNode; 

      foreach (HtmlNode link in doc.SelectNodes("//a[@href]")) 
      { 
       //HtmlAttribute att = link.Attributes["href"]; 
       string hrefValue = link.GetAttributeValue("href", string.Empty); 
       if (!hrefValue.ToString().ToUpper().Contains("GOOGLE") && hrefValue.ToString().Contains("/url?q=") && hrefValue.ToString().ToUpper().Contains("HTTP://")) 
       { 
        int index = hrefValue.IndexOf("&"); 
        if (index > 0) 
        { 
         hrefValue = hrefValue.Substring(0, index); 
         listBox1.Items.Add(hrefValue.Replace("/url?q=", "")); 
        } 
       } 
      } 
     } 
    } 
}