Ich habe den Code geschrieben, um alle Bilder von Instagram auf einmal herunterzuladen. Ein stabiler Betrieb kann erwartet werden, indem die Anmelde- und Bildschirm-Scrolling-Teile manuell ausgeführt werden.
Es funktioniert so.
⚠️ Die [Nutzungsbedingungen] von Instagram (https://www.facebook.com/help/instagram/478745558852511) verbieten die Verwendung automatisierter Mittel zum Abrufen von Informationen. Erstellen Sie keine Automatisierungstools basierend auf dem Inhalt dieses Artikels.
Selenium ist eine Gruppe von Tools mit Funktionen, die auf die Testautomatisierung von Webanwendungen spezialisiert sind. Weitere Informationen finden Sie im Artikel "Instagram-Follower-All-out-Strategie-Mastering von Selenium und PyAutoGUI mit Python !! -". ..
Bitte bereiten Sie eine Umgebung vor, in der Python 3 verwendet werden kann.
Installieren Sie Selen mit pip install selenium
.
Von ChromeDriver --WebDriver für Chrome Laden Sie den Chrome-Treiber herunter, der der aktuell verwendeten Chrome-Version entspricht. Sie können die Chrome-Version überprüfen, indem Sie in Chrome nach "chrome: // version /" suchen. Es ist bequem!
Um den Chrome-Treiber auf die neueste Version zu aktualisieren, führen Sie "Chrome-Treiber neu installieren" aus.
[1. Bei Instagram anmelden](# 1 Bei Instagram anmelden) [2. Bild-URL abrufen](# 2 Bild-URL abrufen) [3. Bild herunterladen](# 3 Bild herunterladen)
Der Fluss ist mir egal, ich möchte ihn vorerst verschieben In diesem Fall wird unten [Ganzer Code](# Ganzer Code) aufgelistet, also bitte!
Klicken Sie hier für das GitHub-Repository (https://github.com/ekkyu/InstaImgCollector).
Sie werden aufgefordert, sich manuell anzumelden. Bitte besorge dir vorher einen Instagram Account.
self.login_time = 20
self.options = webdriver.ChromeOptions()
self.options.add_argument('--no-sandbox')
self.driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=self.options)
self.action = ActionChains(self.driver)
def login(self):
url = "https://www.instagram.com/"
self.driver.get(url)
sleep(self.login_time)
Durch Hinzufügen von "options.add_argument (" --no-sandbox ")" wird der Anmeldebildschirm tatsächlich in einem separaten Fenster geöffnet.
Die zum Anmelden erforderliche Zeit wird durch "login_time = 20" angegeben. Diesmal waren es 20 Sekunden.
Als nächstes erhalten Sie die URL des Bildes. Scrollen Sie manuell zum Ende Ihrer Profilseite.
Aufgrund der Spezifikationen von Instagram wird das Bild erfasst, das als Reaktion auf das Scrollen auf dem Bildschirm angezeigt wird.
Wenn es schwierig ist, das Bild der Bewegung zu erfassen, scrollen Sie durch die Profilseite, während Sie das Bedienfeld "Element" der "Entwicklertools" anzeigen, das durch Drücken der Taste ("Befehl" + "Option" + "I") angezeigt wird. schauen Sie bitte.
Wenn Sie sich nicht sicher sind, drücken Sie die Taste (Befehl
+ Option
+ I
), während Sie den aktuellen Bildschirm beibehalten.
Sie sollten in der Lage sein, die HTML-Quelle für diese Seite zu sehen.
self.img_url_list = []
self.window_width = 0
self.window_height = 0
self.scroll_time = 30
def return_img_pattern(self):
html_source = self.driver.page_source
pattern = '><a href="/p/(.*?)/"><div class="'
results = re.findall(pattern, html_source, re.S)
return results
def fetch_img_url(self, target_username) -> list:
url = "https://www.instagram.com/{}".format(target_username)
self.driver.get(url)
self.driver.maximize_window()
for i in range(self.scroll_time):
sleep(1)
url_list = self.return_img_pattern()
new_url = [i for i in url_list if i not in self.img_url_list]
self.img_url_list.extend(new_url)
return self.img_url_list
Die zum Scrollen benötigte Zeit wird durch "scroll_time = 30" angegeben. Diesmal waren es 30 Sekunden.
Liest den geänderten HTML-Code durch Scrollen jede Sekunde. Derzeit wird nur (ein Teil) der Bild-URL mithilfe des Musters für reguläre Ausdrücke aus dem HTML-Code extrahiert.
Verwenden Sie abschließend die erhaltene Bild-URL, um das Bild sofort herunterzuladen.
self.download_img_size = "l"
# l: 640×640px
# m: 306×306px
# t: 150×150px
def download_img(self, url, save_file_path):
full_url = "https://www.instagram.com/p/" + str(url) + "/media/?size=" + self.download_img_size
r = requests.get(full_url, stream=True)
if r.status_code == 200:
with open(save_file_path, 'wb') as f:
f.write(r.content)
Die Größe des herunterzuladenden Bildes beträgt
Sie können aus wählen. Bitte geben Sie download_img_size
an.
import re
import json
import requests
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
class InstaImgCollector:
def __init__(self):
self.img_url_list = []
self.window_width = 0
self.window_height = 0
self.login_time = 20
self.scroll_time = 30
self.download_img_size = "l"
# l: 640×640px
# m: 306×306px
# t: 150×150px
self.options = webdriver.ChromeOptions()
self.options.add_argument('--no-sandbox')
self.driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver', options=self.options)
self.action = ActionChains(self.driver)
def return_img_pattern(self):
html_source = self.driver.page_source
pattern = '><a href="/p/(.*?)/"><div class="'
results = re.findall(pattern, html_source, re.S)
return results
def login(self):
url = "https://www.instagram.com/"
self.driver.get(url)
sleep(self.login_time)
def fetch_img_url(self, target_username) -> list:
url = "https://www.instagram.com/{}".format(target_username)
self.driver.get(url)
self.driver.maximize_window()
for i in range(self.scroll_time):
sleep(1)
url_list = self.return_img_pattern()
new_url = [i for i in url_list if i not in self.img_url_list]
self.img_url_list.extend(new_url)
return self.img_url_list
def download_img(self, url, save_file_path):
full_url = "https://www.instagram.com/p/" + str(url) + "/media/?size=" + self.download_img_size
r = requests.get(full_url, stream=True)
if r.status_code == 200:
with open(save_file_path, 'wb') as f:
f.write(r.content)
def get_post_url_from_id(self, id_):
self.login()
self.img_url_list = self.fetch_img_url(target_username=id_)
self.driver.quit()
return self.img_url_list
def flatten(self, alist):
return [ flatten for inner in alist for flatten in inner ]
if __name__ == '__main__':
id_ = "Geben Sie hier die Insta-ID an"
iic = InstaImgCollector()
url_list = iic.get_post_url_from_id(id_)
for url_i in url_list:
iic.download_img(url_i, "img/{}.png ".format(url_i))
InstaImgCollector Was ist Selen Zusammenfassung der häufig verwendeten Betriebsmethoden des Selenium-Webdrivers So überprüfen Sie die Version von Google Chrome [Allgemein für Mac / Windows]
Recommended Posts