Wyszukiwanie w Google za pomocą Pythona

Chcę przeszukiwać tekst w Google za pomocą skryptu Pythona i zwracać nazwę, opis i adres URL dla każdego wyniku. Obecnie używam tego kodu:

from google import search

ip=raw_input("What would you like to search for? ")

for url in search(ip, stop=20):
     print(url)

Zwraca tylko adres URL. jak Mogę zwrócić nazwę i opis dla każdego adresu URL?

Author: Blaszard, 2016-07-28

5 answers

Zakładam, że używasz tej biblioteki autorstwa Mario Vilasa z powodu argumentu stop=20, który pojawia się w jego kodzie. Wygląda na to, że ta biblioteka nie jest w stanie zwrócić niczego poza adresami URL, co sprawia, że jest strasznie nierozwinięta. W związku z tym to, co chcesz zrobić, nie jest możliwe z aktualnie używaną biblioteką.

Sugerowałbym zamiast tego użycieabenassi/Google-Search-API . Następnie możesz po prostu zrobić:

from google import google
num_page = 3
search_results = google.search("This is my query", num_page)
for result in search_results:
    print(result.description)
 18
Author: Jokab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-28 12:54:32

Nie exatcly to, czego szukałem, ale znalazłem sobie fajne rozwiązanie na teraz(mogę edytować to, jeśli będę w stanie to poprawić). Połączyłem wyszukiwanie w Google tak jak to zrobiłem (zwracając tylko URL) i piękny pakiet zupy do parsowania stron HTML:

from google import search
import urllib
from bs4 import BeautifulSoup

def google_scrape(url):
    thepage = urllib.urlopen(url)
    soup = BeautifulSoup(thepage, "html.parser")
    return soup.title.text

i = 1
query = 'search this'
for url in search(query, stop=10):
    a = google_scrape(url)
    print str(i) + ". " + a
    print url
    print " "
    i += 1

To daje mi listę tytułów stron i link.

I inne świetne rozwiązania:

from google import search
import requests

for url in search(ip, stop=10):
            r = requests.get(url)
            title = everything_between(r.text, '<title>', '</title>')
 11
Author: Yarden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-25 08:58:12

Większość z nich próbowałem użyć, ale nie wyszło mi lub dał błędy jak search module not found pomimo importowania pakietów. Albo ćwiczyłem z selenium web driver i działa świetnie, jeśli jest używany z Firefox lub chrome lub Phantom web browser, ale nadal czułem, że było to nieco powolne pod względem czasu wykonania, ponieważ najpierw zapytało przeglądarkę, a następnie zwróciło wynik wyszukiwania.

więc pomyślałem o użyciu google api i działa niesamowicie szybko i zwraca wyniki dokładnie.

Zanim udostępnię kod oto kilka szybkich wskazówek do naśladowania:-

  1. Zarejestruj się na Google Api, aby uzyskać klucz Google Api (darmowa wersja)
  2. Teraz wyszukaj niestandardowe wyszukiwanie Google i skonfiguruj bezpłatne konto, aby uzyskać niestandardowy identyfikator wyszukiwania
  3. Teraz dodaj ten pakiet (Google-api-python-client) do swojego projektu Pythona (można to zrobić pisząc !pip install google-api-python-client)

To jest to i wszystko co musisz teraz zrobić to uruchomić ten kod: -

from googleapiclient.discovery import build

my_api_key = "your API KEY TYPE HERE"
my_cse_id = "YOUR CUSTOM SEARCH ENGINE ID TYPE HERE"

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("YOUR SEARCH QUERY HERE",my_api_key,my_cse_id,num=10) 

for result in results:
      print(result["link"])
 6
Author: Piyush Rumao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-06 01:50:57

Możesz również korzystać z usług stron trzecich, takich jak Serp API , który jest wynikiem wyszukiwarki Google. Rozwiązuje problemy związane z wynajmowaniem serwerów proxy i analizowaniem wyników HTML. Wyjście JSON jest szczególnie bogate.

Łatwo jest zintegrować z Pythonem:
from lib.google_search_results import GoogleSearchResults

params = {
    "q" : "Coffee",
    "location" : "Austin, Texas, United States",
    "hl" : "en",
    "gl" : "us",
    "google_domain" : "google.com",
    "api_key" : "demo",
}

query = GoogleSearchResults(params)
dictionary_results = query.get_dictionary()

GitHub: https://github.com/serpapi/google-search-results-python


 1
Author: Hartator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-23 20:01:20

Zazwyczaj nie można użyć funkcji wyszukiwania google z Pythona, importując pakiet google w python3. ale możesz go użyć w python2.

Nawet przy użyciu żądań.get (url+query) Złomowanie nie zostanie wykonane, ponieważ google zapobiega złomowaniu, przekierowując je na stronę captcha.

Możliwe sposoby:

  • możesz napisać kod w python2
  • Jeśli chcesz go zapisać w python3, Utwórz 2 pliki i pobierz wyniki wyszukiwania ze skryptu python2.
  • Jeśli znaleziono trudno, najlepszym sposobem jest korzystanie z Google Colab lub Jupyter Notebook z python3 runtime. Nie dostaniesz żadnego błędu.
 1
Author: Strange,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 18:08:16