我想在google图片上执行查询,以便在c#中使用htmlagilitypack获取图片。 为此我使用了对图像的xpath请求
//*[@id="rg_s"]/div[1]/a/img
但它无法以这种方式获取图像。这样做的正确方法是什么?
答案 0 :(得分:1)
在其API之外以编程方式搜索谷歌是针对TOS。考虑Google Custom Search或Bing 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", ""));