¿Cómo obtener el rango de la página en los resultados de búsqueda de Google usando BeautifulSoup?

En este artículo, aprenderemos cómo obtener el ranking de páginas de Google buscando una palabra clave usando Python. Comprendamos los conceptos básicos del ranking de Google y luego procedamos a encontrarlo usando Python.

Clasificación de Google

El ranking de palabras clave de Google es la posición en la que el sitio web está presente en la Búsqueda de Google cuando un usuario busca la palabra clave. En otras palabras, la búsqueda de Google consiste básicamente en clasificar cientos de miles de millones de páginas web en el índice de búsqueda para encontrar los resultados más relevantes y útiles en una fracción de segundo y presentarlos de una manera que lo ayude a encontrar lo que está buscando. . 

¿Cómo encontramos el rango?

Usamos un módulo llamado requests que tiene un método get que devuelve una respuesta que contiene el contenido de la página, el estado, etc. Guardamos la respuesta en una página de objeto y extraemos el contenido de la página del objeto usando el método page.text y usamos sopa hermosa para analice el documento en HTML utilizando el analizador HTML incorporado de Python para que podamos acceder a los datos del documento HTML y obtener la URL de la palabra clave buscada.

Módulos necesarios

Necesitamos instalar dos módulos, requests y bs4 respectivamente a través de pip en su sistema.

Requests: el módulo de requests le permite enviar requests HTTP y devuelve una respuesta con todos los datos, como el estado, el contenido de la página, etc.

Syntax: pip install requests

Beautiful Soup: el módulo Beautiful Soup le permite analizar los documentos HTML o XML sin formato utilizando el analizador HTML incorporado de Python para que podamos extraer datos del documento analizado.

pip install bs4

Acercarse:

1. Necesitamos proporcionar la palabra clave que se buscará y el sitio web para encontrar el rango si existe en un número determinado de consultas de búsqueda.

URL base para la búsqueda en Google: “https://www.google.com/search?q=” 
Agregue la palabra clave reemplazando los espacios con “+” 
Agregue &num=30 y represente el número de resultados de búsqueda como 30
URL final = “ https://www.google.com/search?q=Best+dsa+practice+questions&num=30”

2. Use el método request.get(url) para enviar una solicitud HTTP a una búsqueda de Google que devuelve una respuesta del motor de búsqueda que se guarda en la página como un objeto.

página = requests.get(“https://www.google.com/search?q=Best+dsa+practice+questions&num=30”)

3. Use el método page.text para obtener el contenido de la página y analizar el código HTML sin procesar usando una sopa hermosa.

soup = BeautifulSoup(page.text, 'html.parser')

Esto crea un árbol analizado que ayuda a acceder a los datos del documento HTML.

4. Encuentre el div, todos con la misma clase llamada «ZINbbc xpd O9g5cc uUPGi» usando soup.find_all() ya que contiene todas las consultas de búsqueda junto con las URL dentro de la etiqueta <a> y las almacena en result_div. (consulte la imagen que tiene las herramientas para desarrolladores a continuación)

result_div = sopa.find_all(‘div’, attrs={‘clase’: ‘ZINbbc xpd O9g5cc uUPGi’})

Aquí hay una imagen de las herramientas para desarrolladores donde todas las consultas de búsqueda tienen la misma clase div pero contienen diferentes URL, y podemos ver aquí que el rango es 2 al verificar la URL en la etiqueta <a>.

5. Repita result_div y busque la etiqueta <a> y verifique si existe alguna URL, si la encuentra, verifique si coincide con el sitio web proporcionado en la entrada y agrega el rango a rank_list. (rank_list es una variable de string ya que pueden ocurrir múltiples rangos)

link = div.find("a", href=True)
if link['href'][7:7+len(website)] == website:
    rank_list += str(rank)+","

6. Una vez finalizada la iteración, devuelva rank_list e imprima el rango.

A continuación se muestra la implementación completa:

Python3

# import the required modules
import requests
from bs4 import BeautifulSoup
 
# Function will get all the ranks of the website
# by searching the keyword in google and returns
# a string of ranks or Website Missing if the website
# doesn't occur in the given number of search queries.
def find_rank(keyword, website, search_query):
 
    # Initialise the required variables
    rank, rank_list = 1, ""
 
    # Base search url of google
    url = "https://www.google.com/search?q="
 
    # Replaces whitespace with "+" in keyword
    keyword = keyword.replace(" ", "+")
 
    # Base url is updated with the keyword to be
    # searched in given number of search results.
    url = url + keyword + "&num=" + str(search_query)
 
    # requests.get(url) returns a response that is saved
    # in a response object called page.
    page = requests.get(url)
 
    # page.text gives us access to the web data in text
    # format, we pass it as an argument to BeautifulSoup
    # along with the html.parser which will create a
    # parsed tree in soup.
    soup = BeautifulSoup(page.text, 'html.parser')
 
    # soup.find_all finds the div, all having the same
    # class "ZINbbc xpd O9g5cc uUPGi" that is stored
    # in result_div
    result_div = soup.find_all(
        'div', attrs={'class': 'ZINbbc xpd O9g5cc uUPGi'})
 
    # Iterate result_div and check for the given website
    # inside <a> tag adding the rank to the
    # rank_list if found.
    for div in result_div:
        try:
 
          # Finds <a> tag and checks if the url is present,
          # if present then check with the provided
          # website in main()
            link = div.find("a", href=True)
            if link['href'][7:7+len(website)] == website:
                rank_list += str(rank)+","
            rank += 1
        except:
            pass
    return (rank_list, "Website Missing")[rank_list == ""]
 
# Main Function
if __name__ == "__main__":
    keyword = "dsa practice questions"
    website = "https://www.geeksforgeeks.org"
    search_query = 30
    rank = find_rank(keyword, website, search_query)
     
    if rank == "Website Missing":
        print(rank)
    else:
        print("Rank of Website :", rank[:-1])

Producción:

Rank of Website : 1,2

Publicación traducida automáticamente

Artículo escrito por anilabhadatta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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