es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Duplicador de raspador de Instagram con Selenium.

Estoy tratando de hacer web scraping en Instagram por medio del hashtag en este caso perro utilizando Selenium
1. realizar scroll para cargar las imágenes
2. obtener los enlaces de los posts de las imágenes cargadas

pero me di cuenta de que la mayoría de los enlaces están repetidos (últimas 3 líneas). No sé cuál es el problema, incluso intenté muchas bibliotecas para hacer web scraping en Instagram, pero todas ellas dan errores o no realizan la búsqueda por hashtag.
Estoy intentando hacer web scraping en Instagram para obtener datos de imágenes para mi modelo de clasificación de Aprendizaje Automático profundo.
Además, me gustaría saber si hay mejores métodos para hacer web scraping en Instagram.

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains as AC

driver = webdriver.Edge("msedgedriver.exe")
driver.get("https://www.instagram.com")

tag = "perro"
numberOfScrolls = 70

Sección de inicio de sesión

time.sleep(3)
nombre_de_usuario = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label/input')
nombre_de_usuario.send_keys("miusuario")

campo_de_contraseña = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label/input')
campo_de_contraseña.send_keys("micontraseña")
time.sleep(1)

driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[3]').click()
time.sleep(5)

Sección de web scraping

enlace = "https://www.instagram.com/explore/tags/" + tag
driver.get(enlace)
time.sleep(5)
enlaces = []
for i in range(numberOfScrolls):
    AC(driver).send_keys(Keys.END).perform()  # scroll hasta el final de la página
    time.sleep(1)
    for x in range(1, 8):
        try:
            fila = driver.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[2]/div/div[' + str(i) + ']')
            fila = fila.find_elements_by_tag_name("a")
            for elemento in fila:
                if elemento.get_attribute("href") is not None:
                    print(elemento.get_attribute("href"))
                    enlaces.append(elemento.get_attribute("href"))
        except:
            continue

print(len(enlaces))
enlaces = list(set(enlaces))
print(len(enlaces))
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para Rastrear Instagram por Hash tag “Dog”

    El siguiente código de Python se utiliza para rastrear las publicaciones de Instagram asociadas al hashtag “dog”. El objetivo de la extracción de datos es recopilar datos de imagen para un modelo de Aprendizaje Profundo que pueda clasificar imágenes de perros.

    Pasos para rastrear Instagram en busca de imágenes asociadas al hash tag “Dog”

    • El código primero inicia sesión en Instagram y luego navega a la URL de interés.
    • Luego, el código desplaza la página web varias veces, ya que Instagram carga sus imágenes de forma dinámica a través de Javascript.
    • Por último, se obtienen los enlaces de las publicaciones cargadas y se guardan en una lista.
    • La lista de enlaces se deduplica utilizando el tipo de dato “set” en Python.

    Nota: El problema de los enlaces repetidos puede producirse si se desplaza la página más de lo necesario.

    Código Fuente

    import time
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.action_chains import ActionChains as AC
    
    driver = webdriver.Edge("msedgedriver.exe")
    driver.get("https://www.instagram.com")
    
    tag = "dog"
    numberOfScrolls = 70
    
    ### Sección de inicio de sesión ###
    
    time.sleep(3)
    username_field = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[1]/div/label/input')
    username_field.send_keys("miusuario")
    
    password_field = driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[2]/div/label/input')
    password_field.send_keys("micontraseña")
    time.sleep(1)
    
    driver.find_element_by_xpath('//*[@id="loginForm"]/div/div[3]').click()
    time.sleep(5)
    
    ### Sección de rastreo ###
    
    link = "https://www.instagram.com/explore/tags/" + tag
    driver.get(link)
    time.sleep(5)
    Links = []
    for i in range(numberOfScrolls):
        AC(driver).send_keys(Keys.END).perform()  # se desplaza hasta el final de la página
        time.sleep(1)
        for x in range(1, 8):
            try:
                row = driver.find_element_by_xpath(
                    '//*[@id="react-root"]/section/main/article/div[2]/div/div[' + str(i) + ']')
                row = row.find_elements_by_tag_name("a")
                for element in row:
                    if element.get_attribute("href") is not None:
                        print(element.get_attribute("href"))
                        Links.append(element.get_attribute("href"))
            except:
                continue
    
    print(len(Links))
    Links = list(set(Links))
    print(len(Links))
    

    Salida

    La salida de este código Python debe ser una lista de enlaces a publicaciones de Instagram para el hashtag “dog”. La primera instrucción de impresión muestra el número de enlaces encontrados, mientras que la segunda muestra el número de enlaces después de la deduplicación.

    La variable “numberOfScrolls” controla cuántas veces se desplaza la página web. Un valor mayor para esta variable puede resultar en más enlaces extraídos.

    Espero que esta solución para rastrear Instagram sea útil. Si encuentras algún problema o tienes alguna pregunta, ¡no dudes en comentar!

Comments are closed.