Saltar al contenido

Web Scraping de búsqueda de Google con Python

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 qque 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 .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *