2016-05-07 48 views
26

Tôi có một đoạn mã bằng cách sử dụng mô-đun pygoogle python cho phép tôi để lập trình tìm kiếm đối với một số thuật ngữ trong google succintly:lập trình tìm kiếm google trong Python sử dụng tìm kiếm tùy chỉnh

g = pygoogle(search_term) 
g.pages = 1 
results = g.get_urls()[0:10] 

Tôi vừa phát hiện ra rằng điều này đã được không may bị gián đoạn và được thay thế bằng một thứ gọi là tìm kiếm tùy chỉnh của google. Tôi đã xem xét các câu hỏi liên quan khác về SO nhưng không tìm thấy bất cứ điều gì tôi có thể sử dụng. Tôi có hai câu hỏi:

1) Tìm kiếm tùy chỉnh của Google có cho phép tôi thực hiện chính xác những gì tôi đang làm trong ba dòng ở trên không?

2) Nếu có - tôi có thể tìm mã ví dụ để làm chính xác những gì tôi đang làm ở trên? Nếu không thì cách thay thế để làm những gì tôi đã làm bằng cách sử dụng pygoogle?

+0

Dường như Tìm kiếm tùy chỉnh trả về kết quả được lưu trong bộ nhớ cache không đồng bộ với các tìm kiếm mới nhất của Google? – Alex

Trả lời

52

Có thể thực hiện việc này. Việc thiết lập là ... không phải là rất đơn giản, nhưng kết quả cuối cùng là bạn có thể tìm kiếm toàn bộ trang web từ python với vài dòng mã.

Tổng cộng có 3 bước chính.

bước 1: có được Google API key

bang trang Các pygoogle 's:

Rất tiếc, Google không còn hỗ trợ API SOAP cho tìm kiếm, cũng không làm họ cung cấp mã bản quyền mới. Tóm lại, PyGoogle là khá nhiều người chết vào thời điểm này.

Bạn có thể sử dụng API AJAX của họ thay thế. Hãy xem mã mẫu ở đây: http://dcortesi.com/2008/05/28/google-ajax-search-api-example-python-code/

... nhưng bạn thực sự không thể sử dụng AJAX API. Bạn phải nhận khóa Google API. https://developers.google.com/api-client-library/python/guide/aaa_apikeys Để sử dụng thử nghiệm đơn giản, tôi đề xuất "khóa máy chủ".

Bước thứ hai: thiết lập Công cụ tìm kiếm tùy chỉnh để bạn có thể tìm kiếm toàn bộ trang web

Thật vậy, API cũ không khả dụng. API mới tốt nhất có sẵn là Tìm kiếm tùy chỉnh. Dường như với chỉ hỗ trợ tìm kiếm trong các lĩnh vực cụ thể, tuy nhiên, sau khi làm theo this SO answer bạn có thể tìm kiếm trên toàn bộ web:

  1. Từ trang chủ Google Custom Search (http://www.google.com/cse/), nhấp vào Tạo một Công cụ Tìm kiếm Tuỳ chỉnh.
  2. Nhập tên và mô tả cho công cụ tìm kiếm của bạn.
  3. Trong Xác định công cụ tìm kiếm của bạn, trong hộp Sites to Search, nhập ít nhất một URL hợp lệ (Hiện tại, chỉ cần đặt www.anyurl.com để nhận qua màn hình này. Thêm thông tin sau này).
  4. Chọn ấn bản CSE bạn muốn và chấp nhận Điều khoản dịch vụ, sau đó nhấp vào Tiếp theo. Chọn tùy chọn bố cục bạn muốn, rồi bấm Tiếp theo.
  5. Nhấp vào bất kỳ liên kết nào trong phần Bước tiếp theo để điều hướng đến bảng điều khiển của bạn.
  6. Trong menu bên trái, trong Bảng điều khiển, hãy nhấp vào Thông tin cơ bản.
  7. Trong phần Tùy chọn tìm kiếm, chọn Tìm kiếm trên toàn bộ web nhưng nhấn mạnh các trang web được bao gồm.
  8. Nhấp vào Lưu thay đổi.
  9. Trong menu bên trái, trong Bảng điều khiển, hãy nhấp vào Trang web.
  10. Xóa trang web bạn đã nhập trong quá trình thiết lập ban đầu.

Cách tiếp cận này cũng được đề nghị bởi Google: https://support.google.com/customsearch/answer/2631040

bước 3: cài đặt ứng dụng Google API cho Python

pip install google-api-python-client, thông tin thêm ở đây:

bước thứ 4 (tiền thưởng): thực hiện tìm kiếm

Vì vậy, sau khi thiết lập này, bạn có thể làm theo các mẫu mã từ vài nơi:

và kết thúc với điều này:

from googleapiclient.discovery import build 
import pprint 

my_api_key = "Google API key" 
my_cse_id = "Custom Search Engine ID" 

def google_search(search_term, api_key, cse_id, **kwargs): 
    service = build("customsearch", "v1", developerKey=api_key) 
    res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute() 
    return res['items'] 

results = google_search(
    'stackoverflow site:en.wikipedia.org', my_api_key, my_cse_id, num=10) 
for result in results: 
    pprint.pprint(result) 

Sau một vài tinh chỉnh bạn có thể viết một số chức năng y hệt như đoạn mã của bạn, nhưng tôi sẽ bỏ qua bước này đây.

+0

Cảm ơn, đó là một câu trả lời tuyệt vời. – user3079275

+3

'my_cse_id' có thể được tìm thấy từ' https://cse.google.com/cse/setup/basic?cx= 'và thay thế'% 3A' bằng ':' – Hugo

+0

Mã trên cho kết quả tương tự đôi khi. Bất kỳ ý tưởng? –

Các vấn đề liên quan