Instagram Crawler findet nur begrenzt Beiträge
Verfasst: Donnerstag 16. April 2020, 13:45
Hi Zusammen,
habe erst vor kurzen von anderen Programmiersprachen auf Python gewechselt und wollte als erstes Projekt mal einen Instagram Crawler schreiben.
Soweit würde er auch funktionieren, wenn man jedoch einen Account mit ca. über 40 Beiträgen angibt, findet das Programm irgendwann keine Bilder mehr.
Hier mein Code:
Wollte erst mal grob mein Programm planen bevor ich es mit Klassen schreibe...
Zur Erklärung:
Instagram zeigt ja die ersten 12 Beitäge an, wenn man nach unten Scrollt werden die nächsten, sofern vorhanden, per Ajax geladen.
Mein Programm sucht also solang Beiträge, bis diese nicht mehr existieren. Dann scrollt das Script nach unten, sodass die nächsten Beiträge geladen werden usw.
Klappt ja auch, nur ab den 40 / 43 Beitag werden dann keine Bilder mehr gefunden.
Wenn ich Chrome auf sichtbar stell, werden die Beiträge jedoch korrekt geladen.
Könnte mir da jemand helfen?
Vielen Dank!
habe erst vor kurzen von anderen Programmiersprachen auf Python gewechselt und wollte als erstes Projekt mal einen Instagram Crawler schreiben.
Soweit würde er auch funktionieren, wenn man jedoch einen Account mit ca. über 40 Beiträgen angibt, findet das Programm irgendwann keine Bilder mehr.
Hier mein Code:
Code: Alles auswählen
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument("disable-gpu")
options.add_argument("--log-level=3")
print('Chrome Sitzung wird geöffnet...')
browser = webdriver.Chrome('chromedriver.exe', options=options)
# browser = webdriver.Chrome('chromedriver.exe')
# browser.set_window_position(-10000,0)
print('Angeforderte Seite wird geladen...')
browser.get('https://www.instagram.com/accounts/login/')
sleep(1)
browser.find_element_by_name('username').send_keys('Username')
browser.find_element_by_name('password').send_keys('Password')
browser.find_element_by_name('password').send_keys(Keys.ENTER)
print('Login abgeschlossen...')
sleep(5)
browser.get('https://www.instagram.com/best_joudlerz_')
# articels = browser.find_elements_by_xpath("(//span[@class='g47SY '])").get_attribute('innerHTML')
articels = browser.find_element_by_xpath("(//span[@class='g47SY '])").get_attribute('innerHTML')
num_articels = ""
for i in articels:
if i != ".":
num_articels = num_articels + i
articels = int(num_articels)
found = []
for i in range(articels):
try:
found.append(browser.find_element_by_xpath("(//img[@class='FFVAD'])[" + str(i+1) + "]"))
print(i+1, " from", articels)
except:
print("Scroll...")
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
sleep(3)
for k in found:
print(k.get_attribute('src'))
print("\n")
Zur Erklärung:
Instagram zeigt ja die ersten 12 Beitäge an, wenn man nach unten Scrollt werden die nächsten, sofern vorhanden, per Ajax geladen.
Mein Programm sucht also solang Beiträge, bis diese nicht mehr existieren. Dann scrollt das Script nach unten, sodass die nächsten Beiträge geladen werden usw.
Klappt ja auch, nur ab den 40 / 43 Beitag werden dann keine Bilder mehr gefunden.
Wenn ich Chrome auf sichtbar stell, werden die Beiträge jedoch korrekt geladen.
Könnte mir da jemand helfen?
Vielen Dank!