2015-01-14 5 views
1

Как я могу анализировать результаты Google, как в моем примере?parse google результаты поиска

<div class="srg"> 
<li class="g">...</li> 
<li class="g">...</li> 
<li class="g">...</li> 
<li class="g">...</li> 
<li class="g">...</li> 
<li class="g">...</li> 
</div> 

Это мой код для анализа результатов Google, selectNodes остается null.

HtmlAgilityPack.HtmlDocument doc1 = new HtmlAgilityPack.HtmlDocument(); 
StreamReader reader = new StreamReader(WebRequest.Create("http://www.google.com/?gws_rd=ssl#q=(404)8271500").GetResponse().GetResponseStream(), Encoding.Default); //put your encoding    
doc1.Load(reader); 

var selectNodes = doc1.DocumentNode.SelectNodes("//li[@class='g']"); 
foreach (var node in selectNodes) 
{ 
    //node.InnerText will give you the text content of the li tags ... 
} 
+0

Что вам нужно? Название? URL? Описание? – aloisdg

+0

Название и описание. –

+1

Посмотрите http://scraping.compunect.com и перейдите в «Скребок поиска Google» Существует PHP-проект с открытым исходным кодом, который анализирует Google, это не C#, но он также использует класс DOM для прохождения макета, чтобы вы может посмотреть, как это делается там. Будьте готовы обновлять свой код время от времени, макеты Google не всегда остаются прежними. – John

ответ

1

Пример кода:

 string result = @"<div class=""srg""> 
         <li class=""g"">...</li> 
         <li class=""g"">...</li> 
         <li class=""g"">...</li> 
         <li class=""g"">...</li> 
         <li class=""g"">...</li> 
         <li class=""g"">...</li> 
         </div>"; 

     HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
     doc.LoadHtml(result); 
     var selectNodes = doc.DocumentNode.SelectNodes("//li[@class='g']"); 
     foreach (var node in selectNodes) 
     { 
      //node.InnerText will give you the text content of the li tags ... 
     } 
+0

Я пробовал, но, к сожалению, selectNodes имеет значение null. –

+1

Протестировано и, кажется, работает, пожалуйста, взгляните на обновленный ответ –

+0

Ну, это не простая строка, это результаты поиска номера телефона из Google. –

0

Почему бы не использовать API?

string query = "(404)8271500"; 
string json = ""; 

// Get the Json from the API. Dont forget to put your function in async. 
// You need HttpClient https://www.nuget.org/packages/Microsoft.Net.Http 
using (var client = new HttpClient()) 
{ 
    json = await client.GetStringAsync("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&start=0&q=" + query); 
} 

// Parse the Json string to your object. 
// You need Json.NET https://www.nuget.org/packages/Newtonsoft.Json/ 
GoogleObject googleObject = JsonConvert.DeserializeObject<GoogleObject>(json); 
foreach (var item in googleObject.responseData.results) 
{ 
    Console.WriteLine(item.title); // title 
    Console.WriteLine(item.content); // description 
} 

и ваш GoogleObject:

public class GoogleObject 
{ 
    public Responsedata responseData { get; set; } 
    public object responseDetails { get; set; } 
    public int responseStatus { get; set; } 
} 

public class Responsedata 
{ 
    public Result[] results { get; set; } 
    public Cursor cursor { get; set; } 
} 

public class Cursor 
{ 
    public string resultCount { get; set; } 
    public Page[] pages { get; set; } 
    public string estimatedResultCount { get; set; } 
    public int currentPageIndex { get; set; } 
    public string moreResultsUrl { get; set; } 
    public string searchResultTime { get; set; } 
} 

public class Page 
{ 
    public string start { get; set; } 
    public int label { get; set; } 
} 

public class Result 
{ 
    public string GsearchResultClass { get; set; } 
    public string unescapedUrl { get; set; } 
    public string url { get; set; } 
    public string visibleUrl { get; set; } 
    public string cacheUrl { get; set; } 
    public string title { get; set; } 
    public string titleNoFormatting { get; set; } 
    public string content { get; set; } 
} 

Это не решит проблему, но это может соответствовать вашим потребностям.

+0

Он ограничен 100 запросами в день. –

+0

@ ZionZiprisZafrir ok, так что вы действительно хотите очистить. – aloisdg

+0

@ ZionZiprisZafrir вы должны прочитать [это] (http://google-scraper.squabbel.com/) и [это] (http://stackoverflow.com/questions/22657548/is-it-ok-to-scrape- данные из-Google-результаты). – aloisdg