Хтось знає, чи можна і як можна шукати в Google програмно - особливо якщо для цього є Java API?
Хтось знає, чи можна і як можна шукати в Google програмно - особливо якщо для цього є Java API?
Відповіді:
Деякі факти:
Google пропонує API веб-сервісу для публічного пошуку, який повертає JSON : http://ajax.googleapis.com/ajax/services/search/web . Документація тут
Java пропонує java.net.URL
і java.net.URLConnection
запускати та обробляти HTTP-запити.
JSON в Java може бути перетворений на повноцінний об'єкт Javabean за допомогою довільного API Java JSON. Один з найкращих - Google Gson .
Тепер зробіть математику:
public static void main(String[] args) throws Exception {
String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
String search = "stackoverflow";
String charset = "UTF-8";
URL url = new URL(google + URLEncoder.encode(search, charset));
Reader reader = new InputStreamReader(url.openStream(), charset);
GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
// Show title and URL of 1st result.
System.out.println(results.getResponseData().getResults().get(0).getTitle());
System.out.println(results.getResponseData().getResults().get(0).getUrl());
}
Цей клас Javabean представляє найважливіші дані JSON, повернені Google (він фактично повертає більше даних, але вам належить вправі відповідно розширити цей код Javabean):
public class GoogleResults {
private ResponseData responseData;
public ResponseData getResponseData() { return responseData; }
public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
public String toString() { return "ResponseData[" + responseData + "]"; }
static class ResponseData {
private List<Result> results;
public List<Result> getResults() { return results; }
public void setResults(List<Result> results) { this.results = results; }
public String toString() { return "Results[" + results + "]"; }
}
static class Result {
private String url;
private String title;
public String getUrl() { return url; }
public String getTitle() { return title; }
public void setUrl(String url) { this.url = url; }
public void setTitle(String title) { this.title = title; }
public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
}
}
java.net.URLConnection
Оновлення з листопада 2010 року (через 2 місяці після вищезазначеної відповіді) веб- сервіс загальнодоступних пошукових запитів застарів (і останній день, коли пропонували послугу, був 29 вересня 2014 року). Ваша найкраща ставка зараз запитує http://www.google.com/search безпосередньо разом із сумлінним користувальницьким агентом, а потім аналізує результат за допомогою HTML-аналізатора . Якщо ви опустите користувальницький агент, ви отримаєте 403 назад. Якщо ви лежите в користувальницькому агенті та імітуєте веб-браузер (наприклад, Chrome або Firefox), то ви отримаєте набагато більший відповідь HTML, що є марною пропускною здатністю та продуктивністю.
Ось приклад запуску з використанням Jsoup як HTML-аналізатора:
String google = "http://www.google.com/search?q=";
String search = "stackoverflow";
String charset = "UTF-8";
String userAgent = "ExampleBot 1.0 (+http://example.com/bot)"; // Change this to your company's name and bot homepage!
Elements links = Jsoup.connect(google + URLEncoder.encode(search, charset)).userAgent(userAgent).get().select(".g>.r>a");
for (Element link : links) {
String title = link.text();
String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
url = URLDecoder.decode(url.substring(url.indexOf('=') + 1, url.indexOf('&')), "UTF-8");
if (!url.startsWith("http")) {
continue; // Ads/news/etc.
}
System.out.println("Title: " + title);
System.out.println("URL: " + url);
}
Для пошуку в Google за допомогою API слід скористатись користувацьким пошуковим пошуком Google , розшифровка веб-сторінки заборонена
У Java ви можете користуватися клієнтською бібліотекою API CustomSearch для Java
Залежність Maven:
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-customsearch</artifactId>
<version>v1-rev57-1.23.0</version>
</dependency>
Приклад пошуку за допомогою клієнтської бібліотеки API CustomSearch API
public static void main(String[] args) throws GeneralSecurityException, IOException {
String searchQuery = "test"; //The query to search
String cx = "002845322276752338984:vxqzfa86nqc"; //Your search engine
//Instance Customsearch
Customsearch cs = new Customsearch.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), null)
.setApplicationName("MyApplication")
.setGoogleClientRequestInitializer(new CustomsearchRequestInitializer("your api key"))
.build();
//Set search parameter
Customsearch.Cse.List list = cs.cse().list(searchQuery).setCx(cx);
//Execute search
Search result = list.execute();
if (result.getItems()!=null){
for (Result ri : result.getItems()) {
//Get title, link, body etc. from search
System.out.println(ri.getTitle() + ", " + ri.getLink());
}
}
}
Як бачите, вам потрібно буде запитати ключ api та встановити власний ідентифікатор пошукової системи, cx .
Зауважте, що ви можете здійснити пошук у всій мережі, вибравши "Шукати по всій мережі" в основних налаштуваннях вкладки під час налаштування файлу cx, але результати не будуть точно такими, як у звичайному пошуку Google google.
Наразі (дата відповіді) ви отримуєте 100 дзвінків на день за день безкоштовно, а потім Google хоче поділитися своїм прибутком.
У Умовах надання послуги Google ми можемо прочитати:
5.3 Ви погоджуєтесь не допускати (або намагатися отримати доступ) до будь-яких Служб будь-яким іншим способом, ніж через інтерфейс, який надає Google, якщо вам спеціально не дозволено це зробити в окремому договорі з Google. Ви спеціально погоджуєтесь не допускати (або намагатися отримати доступ) до будь-яких Служб будь-якими автоматизованими засобами (включаючи використання скриптів або веб-сканерів) і гарантуєте, що Ви дотримуєтесь інструкцій, викладених у будь-якому файлі robots.txt, присутньому в Сервісах .
Тож я думаю, що відповідь - ні. Більше про API SOAP більше не доступний
Google TOS трохи розслабився у квітні 2014 року. Тепер він стверджує:
"Не зловживайте нашими Сервісами. Наприклад, не заважайте нашим Сервісам і не намагайтеся отримати доступ до них за допомогою іншого способу, ніж інтерфейс та інструкції, які ми надаємо."
Тож уривок про "автоматизовані засоби" та сценарії зараз відсутній. Очевидно, це все ще не бажаний (від google) спосіб доступу до їхніх послуг, але я думаю, що зараз формально відкрито для інтерпретації, що саме таке "інтерфейс", і чи має це значення, як саме обробляється повернутий HTML ( винесені або розібрані). Так чи інакше, я написав бібліотеку зручності Java, і ви вирішуєте, використовувати її чи ні:
Дійсно, існує API для програмного пошуку google. API називається спеціальним пошуком Google. Для використання цього API вам знадобиться ключ API розробника Google та ключ cx. Проста процедура доступу до google search з програми java пояснена в моєму блозі.
Тепер мертвий, ось посилання Machine Wayback .
В якості альтернативи відповіді BalusC, оскільки вона застаріла і вам потрібно використовувати проксі, ви можете використовувати цей пакет. Зразок коду:
Map<String, String> parameter = new HashMap<>();
parameter.put("q", "Coffee");
parameter.put("location", "Portland");
GoogleSearchResults serp = new GoogleSearchResults(parameter);
JsonObject data = serp.getJson();
JsonArray results = (JsonArray) data.get("organic_results");
JsonObject first_result = results.get(0).getAsJsonObject();
System.out.println("first coffee: " + first_result.get("title").getAsString());
Бібліотека на GitHub
У світлі змін TOS минулого року ми створили API, який надає доступ до пошуку Google. Це було для нашого власного використання, але після деяких запитів ми вирішили відкрити його. Ми плануємо додати додаткові пошукові системи в майбутньому!
Якщо хтось шукає простий спосіб впровадити / придбати результати пошуку, ви можете зареєструватися та спробувати REST API: https://searchapi.io
Він повертає результати JSON і повинен бути досить легким для реалізації з детальними документами.
Прикро, що Бінг і Yahoo в цьому плані на відстані миль від Google. Їх API не дешеві, але принаймні доступні.
Просто альтернатива. Пошук google та аналіз результатів також можна здійснити загальним способом за допомогою будь-якого HTML-аналізатора, наприклад, Jsoup на Java. Далі йде посилання на згаданий приклад.
https://www.codeforeach.com/java/example-how-to-search-google-using-java