2016-05-30 3 views
0

Я хочу извлечь ссылки на результат google
Мой код работает, он извлекает ссылки, но эти ссылки не являются тем, что я ожидал извлечь. Моя программа будет извлекать ссылки внутри тега «href», но все ссылки в результатах поиска не соответствуют соответствующим ссылкам, ссылка на рекламу, ссылка googles также включены что мне делать?извлечение ссылки с использованием HtmlAgilityPack и C#

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() 
      { 
       int index = hrefValue.IndexOf("&"); 
       if (index > 0) 
       { 
        hrefValue = hrefValue.Substring(0, index); 
        listBox1.Items.Add(hrefValue.Replace("/url?q=", "")); 
       } 
      } 
     } 
    } 
} 

}

, если я хочу работать с «HREF» теге я должен добавить некоторое условие, если
, но я не знаю, в каком состоянии я должен использовать здесь:

if() 

где-то я читал об извлечении метки тегов, а не теги ahref
кто-нибудь может помочь?

ответ

1

Чтобы получить ссылки, которые содержатся в cite элементах, просто получить доступ к их внутреннему тексту, например:

HtmlWeb w = new HtmlWeb(); 
    var hd = w.Load("http://www.google.com/search?q=veverke"); 

    var cites = hd.DocumentNode.SelectNodes("//cite"); 

    foreach (var cite in cites) 
     Console.WriteLine(cite.InnerText); 
+0

@ververke Tnx много. Если я хочу получить заголовок каждого url и descreption URL-адреса так же, как страница результатов Google, что мне делать? – mary

+0

Я не очень знаком с 'Xpath', поэтому я бы сделал это, используя css. Чтобы использовать селектор css с помощью 'HtmlAgilityPack', установите пакет scrapSharp' nuget, добавьте' using ScrapySharp.Extensions', и теперь у вас будет метод 'CssSelect', доступный на объектах' HtmlNode'. Теперь запустите 'hd.DocumentNode.CssSelect (". Rc h3 "). Выберите (n => n.InnerText)' должен это сделать. – Veverke

+0

tnx много. hd.DocumentNode.CssSelect (". rc h3"). Выберите (n => n.InnerText) с этой строкой, как я получаю заголовок для каждого URL-адреса? – mary