2017-03-09 13 views
0

질문을 입력하는 파이썬 스크립트를 작성하고 싶습니다. Google 맞춤 검색 API 또는 Bing 또는 다른 검색 API (임의의 하나)에서 응답을받습니다. 나는 구글 맞춤 검색 API를 사용하여 시도하지만 나에게이 스크립트했다 : 나는 어떤 HTML 페이지를 사용하고 있지 않다 때문에Google 검색 Python 스크립트

<script> 
    (function() { 
    var cx = 'someurl'; 
    var gcse = document.createElement('script'); 
    gcse.type = 'text/javascript'; 
    gcse.async = true; 
    gcse.src = 'someurl' + cx; 
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(gcse, s); 
    })(); 
</script> 

을하고 그냥 이렇게 어떻게 파이썬 콘솔에서 대답을 요구? API 호출 이외의 다른 방법이 있습니까?

답변

0

Google 검색을 수행하려면 google 또는 Google-Search-API과 같은 많은 모듈이 있습니다. 그러나 많은 검색을 수행하고 많은 요청을 보내려면 Google이 사용자를 차단하고 오류 503이 발생합니다. 다른 API를 사용하기 전에 Bing 및 Yahoo와 같은 옵션을 사용할 수 있지만 그 중 어느 것도 더 이상 무료가 아닙니다. 인터넷 검색을 수행하는 무료 API는 FAROO API입니다. 그러나 selenium webdriver을 사용하여 Google 검색을 수행하는 옵션은 여전히 ​​있습니다. Selenium은 브라우저 사용을 모방하는 데 사용되며 Firefox, Chrome, Edge 또는 Safari webdrivers (실제로 Chrome을 열고 검색)를 사용하려면 options이 있지만 실제로 브라우저를보고 싶지 않기 때문에 성가시다. 하지만 이것을 해결할 수있는 방법은 PhantomJS입니다. here에서 다운로드하십시오. 추출한 다음 아래 예제에서 사용 방법을 살펴 봅니다. 사용할 수있는 간단한 클래스를 작성 했으므로 Path를 PhantomJS로 변경하면됩니다.

import time 
from urllib.parse import quote_plus 
from selenium import webdriver 


class Browser: 

    def __init__(self, path, initiate=True, implicit_wait_time = 10, explicit_wait_time = 2): 
     self.path = path 
     self.implicit_wait_time = implicit_wait_time # http://www.aptuz.com/blog/selenium-implicit-vs-explicit-waits/ 
     self.explicit_wait_time = explicit_wait_time # http://www.aptuz.com/blog/selenium-implicit-vs-explicit-waits/ 
     if initiate: 
      self.start() 
     return 

    def start(self): 
     self.driver = webdriver.PhantomJS(path) 
     self.driver.implicitly_wait(self.implicit_wait_time) 
     return 

    def end(self): 
     self.driver.quit() 
     return 

    def go_to_url(self, url, wait_time = None): 
     if wait_time is None: 
      wait_time = self.explicit_wait_time 
     self.driver.get(url) 
     print('[*] Fetching results from: {}'.format(url)) 
     time.sleep(wait_time) 
     return 

    def get_search_url(self, query, page_num=0, per_page=10, lang='en'): 
     query = quote_plus(query) 
     url = 'https://www.google.hr/search?q={}&num={}&start={}&nl={}'.format(query, per_page, page_num*per_page, lang) 
     return url 

    def scrape(self): 
     #xpath migth change in future 
     links = self.driver.find_elements_by_xpath("//h3[@class='r']/a[@href]") # searches for all links insede h3 tags with class "r" 
     results = [] 
     for link in links: 
      d = {'url': link.get_attribute('href'), 
       'title': link.text} 
      results.append(d) 
     return results 

    def search(self, query, page_num=0, per_page=10, lang='en', wait_time = None): 
     if wait_time is None: 
      wait_time = self.explicit_wait_time 
     url = self.get_search_url(query, page_num, per_page, lang) 
     self.go_to_url(url, wait_time) 
     results = self.scrape() 
     return results 




path = '<YOUR PATH TO PHANTOMJS>/phantomjs-2.1.1-windows/bin/phantomjs.exe' ## SET YOU PATH TO phantomjs 
br = Browser(path) 
results = br.search('Python') 
for r in results: 
    print(r) 

br.end()