Lila, miembro de nuestro staff, nos ha hecho el favor de redactar este tutorial ya que controla a la perfección el tema.
Solución:
Siempre puedes raspar directamente los resultados de Google. Para hacer esto, puede usar la URL https://google.com/search?q=
esto devolverá los primeros 10 resultados de búsqueda.
Luego puede usar lxml, por ejemplo, para analizar la página. Dependiendo de lo que use, puede consultar el árbol de nodos resultante a través de un CSS-Selector (.r a
) o usando un XPath-Selector (//h3[@class="r"]/a
)
En algunos casos, la URL resultante redirigirá a Google. Por lo general, contiene un parámetro de consulta q
que contendrá la URL de solicitud real.
Código de ejemplo usando lxml y solicitudes:
from urllib.parse import urlencode, urlparse, parse_qs
from lxml.html import fromstring
from requests import get
raw = get("https://www.google.com/search?q=StackOverflow").text
page = fromstring(raw)
for result in page.cssselect(".r a"):
url = result.get("href")
if url.startswith("/url?"):
url = parse_qs(urlparse(url).query)['q']
print(url[0])
Una nota sobre la prohibición de Google de su IP: en mi experiencia, Google solo prohíbe si comienza a enviar spam a Google con solicitudes de búsqueda. Responderá con un 503 si Google cree que eres un bot.
Aquí hay otro servicio que se puede usar para extraer SERP (https://zenserp.com). No requiere un cliente y es más económico.
Aquí hay una muestra de código python:
import requests
headers =
'apikey': '',
params = (
('q', 'Pied Piper'),
('location', 'United States'),
('search_engine', 'google.com'),
('language', 'English'),
)
response = requests.get('https://app.zenserp.com/api/search', headers=headers, params=params)
Recuerda algo, que puedes permitirte decir .