2015-08-03 15 views
10

Google Cevap Kutuları (bazen Öne Çıkan Snippet'ler, Bilgi Kartları veya Canlı Sonuçlar olarak adlandırılır) son derece yararlıdır. Bilgileri ayıklamak ve kendi programımda kullanmak istiyorum. HTML koduna baktığımızda, oradan çekerek o kadar düz değil. Oldukça fazla araştırma yaptım ama onlar için herhangi bir destek bulamıyorum. Yanıt Kutusundan döndürülen bilgileri alabileceğiniz bir API (veya Web Arama API'sı parçası) olup olmadığını bilen var mı?Google Cevap Kutuları için bir API var mı?

Cevabı burada gördüm: google api for glorious info box? , ancak sunulan çözüm geçen ay kullanımdan kaldırıldı. "Nerede tokyo bulunduğu" dan ÇOK farklıdır

<!--m--><div data-hveid="30">  
<div class="vk_c vk_gy vk_sh card-section _MZc"> 
<div class="vk_bk vk_ans">6:37 AM</div> 
<div class="vk_gy vk_sh"> Tuesday, <span class="_Hq">August 4, 2015</span> 
<span class="_Hq"> (GMT+9) </span> 
</div> <span class="vk_gy vk_sh"> Time in Japan </span> 

:

Sadece bir örnek için

enter image description here

, bu "Japonya'da süresi nedir" için HTML kodu
<!--m--> 
<div class="_uX kno-fb-ctx" aria-level="3" role="heading" data-hveid="41" data-ved="0CCkQtwcoATACahUKEwiLjemg8I3HAhUTKYgKHU7jCho"> 
<div class="_eF" data-tts="answers" data-tts-text="Japan">Japan</div> 
<div class="_Tfc"> 
</div></div> 
<!--n--> 
</li><li class="mod" data-md="61" style="clear:none"> 
<!--m--> 
<div class="_oDd" data-hveid="42"> 
<span class="_Tgc _y9e">Tokyo consists of the southwestern part of the Kanto region, the <b>Izu Islands</b>, and the <b>Ogasawara Islands</b>. Tokyo is the capital of <b>Japan</b>, and the place where over 13 million people live, making it one of the most populous cities in the world.</span></div> 

Temel olarak "6:37 AM" i ilk önce ve "Japonya" dan ayırmam gerekiyor, ancak dinamik bir dize araması yapmak çok farklı oldukları için zor olurdu t biçimleri.

+0

Seninle aynı meraklı durumdayım ama onlar beri şimdi ben DuckDuckGo olanaklarını keşfetmeye çalışıyorum benzer özellik: https://duckduckgo.com/api –

cevap

2

Çok fazla araştırma yaptım ve tarif ettiğiniz gibi mevcut bir şey yok gibi görünüyor. Google Arama'dan bilgi çekebilecek hiçbir şey de yoktur.

Bunun bir alternatifi olabileceğini düşünebildiğim tek şey RSS (http://www.w3schools.com/xml/xml_rss.asp) aracılığıyla bilgi almak ve bunu bir şekilde bir programda uygulamaktır.

1

DuckDuckGo'dan geçmişte kullandığım ve oldukça iyi çalışan bir anlık cevap var. Yanıtlar Google’ınki kadar sağlam değil, ancak iyi bir başlangıç.

https://duckduckgo.com/api

API JSON yanıt olarak öylesine benziyor.

{ 
Abstract: "" 
AbstractText: "" 
AbstractSource: "" 
AbstractURL: "" 
Image: "" 
Heading: "" 
Answer: "" 
Redirect: "" 
AnswerType: "" 
Definition: "" 
DefinitionSource: "" 
DefinitionURL: "" 
RelatedTopics: [ ] 
Results: [ ] 
Type: "" 
} 

Umarım bu yardımcı olur!

1

Biraz geç, fakat burada 2017'de Python ve Selenium'u (başsız kromatörü ile) kullanarak arama sayfasının biçimlendirmesini temel alarak "birincil" metni yanıt kutusundan çıkarmak için çalışan bir çözüm var. ve yanıt kutusu, farklı sorgu türlerinde (tutarlı bir şekilde test etmemiş olmama rağmen) makul ölçüde tutarlıdır. Elbette, eleman koordinatları çözünürlük/pencere boyutuna bağlı olarak değişebilir, ancak bunun için ayar yapmak yeterince kolaydır.

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.chrome.options import Options 

chrome_options = Options() 
chrome_options.add_argument("--window-size=1024x768") 
chrome_options.add_argument("--headless") 
driver = webdriver.Chrome(chrome_options=chrome_options) 

def ask_google(query): 

    # Search for query 
    query = query.replace(' ', '+') 

    driver.get('http://www.google.com/search?q=' + query) 

    # Get text from Google answer box 

    answer = driver.execute_script("""return 
    document.elementFromPoint(arguments[0], arguments[1]);""", 350, 230).text 

    return answer 

Ve sorgu ile bu yaklaşımı test (ya onlara yakın) üretir:

ask_google("what is the time in Japan") 

"4:36 PM" 

ask_google("where is tokyo located in japan") 

"Situated on the Kanto Plain, Tokyo is one of three large cities, the other two being Yokohama and Kawasaki, located along the northwestern shore of Tokyo Bay, an inlet of the Pacific Ocean on east-central Honshu, the largest of the islands of Japan."