在 Google 中搜索时如何从第一页获取图像?
How to get the Image from first page when search in Google?
通常在使用Google搜索城市后,右侧会出现维基百科页面的一部分,其中包含图像和地图。谁能告诉我如何访问此图像?我应该知道怎么下载。
如果你想要维基百科文章的主要图片,你必须使用 Wikipedia API。
更新:
您可以使用 jsoup:Java HTML 解析器 org.jsoup:jsoup:1.8.3
其中 return 页面内的图像列表。
String stringResponse = getHtmlContent(url);
Document doc = Jsoup.parse(stringResponse);
Element content = doc.getElementById("content");
//Get all elements with img tag ,
Elements img = content.getElementsByTag("img");
for (Element el : img) {
//for each element get the src image url
String src = el.attr("src");
Log.d(TAG, "src attribute is : " + src);
String alt = el.attr("alt");
//do some stuff
}
更新:
Wikipida 提供 API 到 return HTML Content
实际上,主要图像(与右侧地图图像一起出现)很少来自维基百科,因此您无法使用维基百科 API 获取它。如果你想访问实际的主图像,你可以使用这个:
private static void GetGoogleImage(string word)
{
// make an HTTP Get request
var request = (HttpWebRequest)WebRequest.Create("https://www.google.com.pg/search?q=" + word);
request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36";
using (var webResponse = (HttpWebResponse)request.GetResponse())
{
using (var reader = new StreamReader(webResponse.GetResponseStream()))
{
// get all images with base64 string
var matches = Regex.Matches(reader.ReadToEnd(), @"'data:image/jpeg;base64,([^,']*)'");
if (matches.Count > 0)
{
// get the image with the max height
var bytes = matches.Cast<Match>()
.Select(x => Convert.FromBase64String(x.Groups[1].Value.Replace("\75", "=").Replace("\075", "=")))
.OrderBy(x => Image.FromStream(new MemoryStream(x, false)).Height).Last();
// save the image as 'image.jpg'
using (var imageFile = new FileStream("image.jpg", FileMode.Create))
{
imageFile.Write(bytes, 0, bytes.Length);
imageFile.Flush();
}
}
}
}
}
这对我有用,而且总是 returns 实际的主图像(如果存在的话)。例如,GetGoogleImage("New York")
给我data:image/jpeg;base64,/9j/4AAQSkZJRg...。
我使用了这样一个事实,即从所有 base64 字符串图像作为响应,主图像具有最大高度,因此它只需要按高度对它们进行排序,并 select 最后一个。如果需要,您也可以在此处检查最小图像高度。需要将 5
替换为 =
base64's padding.
通常在使用Google搜索城市后,右侧会出现维基百科页面的一部分,其中包含图像和地图。谁能告诉我如何访问此图像?我应该知道怎么下载。
如果你想要维基百科文章的主要图片,你必须使用 Wikipedia API。
更新:
您可以使用 jsoup:Java HTML 解析器
org.jsoup:jsoup:1.8.3
其中 return 页面内的图像列表。String stringResponse = getHtmlContent(url); Document doc = Jsoup.parse(stringResponse); Element content = doc.getElementById("content"); //Get all elements with img tag , Elements img = content.getElementsByTag("img"); for (Element el : img) { //for each element get the src image url String src = el.attr("src"); Log.d(TAG, "src attribute is : " + src); String alt = el.attr("alt"); //do some stuff }
更新: Wikipida 提供 API 到 return HTML Content
实际上,主要图像(与右侧地图图像一起出现)很少来自维基百科,因此您无法使用维基百科 API 获取它。如果你想访问实际的主图像,你可以使用这个:
private static void GetGoogleImage(string word)
{
// make an HTTP Get request
var request = (HttpWebRequest)WebRequest.Create("https://www.google.com.pg/search?q=" + word);
request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36";
using (var webResponse = (HttpWebResponse)request.GetResponse())
{
using (var reader = new StreamReader(webResponse.GetResponseStream()))
{
// get all images with base64 string
var matches = Regex.Matches(reader.ReadToEnd(), @"'data:image/jpeg;base64,([^,']*)'");
if (matches.Count > 0)
{
// get the image with the max height
var bytes = matches.Cast<Match>()
.Select(x => Convert.FromBase64String(x.Groups[1].Value.Replace("\75", "=").Replace("\075", "=")))
.OrderBy(x => Image.FromStream(new MemoryStream(x, false)).Height).Last();
// save the image as 'image.jpg'
using (var imageFile = new FileStream("image.jpg", FileMode.Create))
{
imageFile.Write(bytes, 0, bytes.Length);
imageFile.Flush();
}
}
}
}
}
这对我有用,而且总是 returns 实际的主图像(如果存在的话)。例如,GetGoogleImage("New York")
给我data:image/jpeg;base64,/9j/4AAQSkZJRg...。
我使用了这样一个事实,即从所有 base64 字符串图像作为响应,主图像具有最大高度,因此它只需要按高度对它们进行排序,并 select 最后一个。如果需要,您也可以在此处检查最小图像高度。需要将 5
替换为 =
base64's padding.