[FIXED] Web-Scraping-Social-Media-Follower, aber die Liste geht in die Hunderttausende. Selen hat keinen Speicher mehr

Ausgabe

Also habe ich Selenium in Chrome verwendet, um zu einem Social-Media-Profil zu gehen und die Benutzernamen seiner Follower zu kratzen. Die Liste geht jedoch in die Hunderttausende und die Seite lädt nur eine begrenzte Menge. Meine Lösung bestand darin, Selenium anzuweisen, endlos nach unten zu scrollen und Benutzernamen mit ‘driver.find_elements’ zu kratzen, aber nach ein paar hundert Benutzernamen stürzt Chrome bald mit dem Fehlercode “Ran out of memory” ab.

Bin ich überhaupt in der Lage, diese ganze Liste zu bekommen?

Ist Selenium überhaupt das richtige Tool oder sollte ich Scrapy verwenden? Vielleicht beide?

Ich bin ratlos, wie ich von hier aus weiterkomme.

Hier ist mein Code nur für den Fall

from easygui import *
import time 
from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService;
from webdriver_manager.chrome import ChromeDriverManager;

choice = ccbox("Run the test?","",("Run it","I'm not ready yet"));
if choice == False:
    quit()

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()));
time.sleep(60) #this is a wait to give me time to manually log in and go 
               #to followers list

SCROLL_PAUSE_TIME = 0.5

# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        driver.execute_script("window.scrollTo(0, 1080);")
        time.sleep(1)
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(2)
    last_height = new_height

Lösung

Ich habe es herausgefunden! Jeder “Follower” hatte also ein Element und endloses Scrollen würde alle diese Elemente im Speicher speichern, bis es an eine Grenze stößt. Ich habe das gelöst, indem ich die Elemente mit Javascript gelöscht habe, nachdem ich eine bestimmte Menge gescrollt habe, spüle und wiederhole, bis ich ganz unten bin 🙂


Beantwortet von –
javery1337


Antwort geprüft von –
Senaida (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like