使用htmlagilitypack获取谷歌图像

时间:2013-11-26 06:50:08

标签: c# web-scraping html-agility-pack

我想在google图片上执行查询,以便在c#中使用htmlagilitypack获取图片。 为此我使用了对图像的xpath请求

//*[@id="rg_s"]/div[1]/a/img

但它无法以这种方式获取图像。这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

在其API之外以编程方式搜索谷歌是针对TOS。考虑Google Custom SearchBing Search API,它们都建立了JSON和SOAP接口。

每个月都可以免费查看几千个查询并遵守服务的服务条款。

编辑:使用Bing API和C#的示例如下:

const string bingKey = "[your key here]";
var bing = new BingSearchContainer(new Uri("https://api.datamarket.azure.com/Bing/Search/")) 
{ 
    Credentials = new NetworkCredential(bingKey, bingKey) 
};

var query = bing.Web("Jon Gallant blog", null, null, null, null, null, null, null);
var results = query.Execute();

foreach(var result in results)
{
    Console.WriteLine(result.Url);
}
Console.ReadKey();

Google自定义搜索API:

string apiKey = "Your api key";
string cx = "Your custom search engine id";
string query = "Your query";

var svc = new Google.Apis.Customsearch.v1.CustomsearchService(new BaseClientService.Initializer { ApiKey = apiKey });
var listRequest = svc.Cse.List(query);

listRequest.Cx = cx;
var search = listRequest.Fetch();

foreach (var result in search.Items)
{
    Response.Output.WriteLine("Title: {0}", result.Title);
    Response.Output.WriteLine("Link: {0}", result.Link);
}

答案 1 :(得分:1)

你也可以试试这个:这里可以通过以下方式获得图像链接

var links = HtmlDocument.DocumentNode.SelectNodes("//a").Where(a => a.InnerHtml.Contains("<img")).Select(b => b.Attributes["href"].Value).ToList();
 foreach(var link in links)
  {
      // you can save the link or do your process here
  }

答案 2 :(得分:1)

Google会使用类div将找到的图片保存在rg_di标记中。这是一个获取图像所有链接的查询:

var links = hdoc.DocumentNode.SelectNodes(@"//div[@class='rg_di']/a")
                .Select(a => a.GetAttributeValue("href", ""));