Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import bs4, requests
- import os
- import selenium.webdriver as webdriver
- import time
- from selenium.common.exceptions import NoSuchElementException
- from selenium.webdriver.common.action_chains import ActionChains
- def checkAmount():
- data = input("Around how many Pictures do u want? e.g: 25,50,100,150,...(Minimum is 25!)")
- try:
- number = int(data)
- except ValueError:
- print("U need to enter a number!")
- return checkAmount()
- if number < 25:
- print("U need to enter a number greater or equal to 25!")
- return checkAmount()
- else:
- picAmount = round((number - 25) / 12)
- return picAmount
- def welcomeMessage():
- print("This program requires firefox and is going to open the browser during the downloading progress.\nPlease do not close it.\n\nAuthor: .. 2016")
- time.sleep(5)
- os.system('cls')
- def displayUserInfo(soup):
- messages = soup.select('._e8fkl')
- followers = soup.select('._pr3wx')
- following = soup.select('._bgvpv')
- if not messages:
- print('\nUser does not exist!')
- time.sleep(2)
- main()
- else:
- messagesValue = messages[0].string
- followersValue = followers[0].string
- followingValue = following[0].string
- print("\nUserinfo:\nMessages: " + messagesValue + " Followers: " + followersValue + " Following: " + followingValue + "\n")
- def askUser():
- user = input("Please insert the username of the user u want to download from: ")
- if user == "":
- user = "programmers_life"
- print("No input detected, default user will be used.")
- url = 'https://www.instagram.com/' + user + '/' # default url
- return url
- def nameFolder(state):
- while state == False:
- folder = input("Name of folder u want to download them to?")
- state = True
- if folder == "":
- folder = "Instagram"
- if os.path.isdir(folder):
- print('Folder exists already!')
- decision = input("Do u want to overwrite the images in this folder? yes or no ").lower()
- if decision == "yes":
- state = True
- else:
- state = False
- if state == True:
- os.makedirs(folder, exist_ok=True)
- return folder
- def mostLikedPicture(soup, driver):
- pictureElem = soup.select('img')
- ActionChains(driver).move_to_element(pictureElem[1])
- time.sleep(8)
- def main():
- #WelcomeMessage
- welcomeMessage()
- #Url Input
- url = askUser()
- #Amount Input
- picAmount = checkAmount()
- #Name of folder
- state = False
- folder = nameFolder(state)
- # Download the page.
- print('Downloading images from %s...' % url)
- driver = webdriver.Firefox()
- driver.maximize_window()
- driver.get(url)
- #Click Load More
- try:
- linkElem = driver.find_element_by_class_name('_oidfu')
- linkElem.click()
- except NoSuchElementException:
- print("User has less than 25 photo\'s or is private\n")
- #Scroll
- i = 0
- while i < picAmount:
- driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
- time.sleep(1)
- i += 1
- #Put in html
- soup = bs4.BeautifulSoup(driver.page_source, "html.parser")
- mostLikedPicture(soup, driver)
- driver.quit()
- #UserInfo
- # displayUserInfo(soup)
- # Find the URL of image.
- pictureElem = soup.select('img')
- if pictureElem == []:
- print('Could not find any instagram image.')
- else:
- for i in range(len(pictureElem)):
- pictureUrl = pictureElem[i].get('src')
- # Download the image.
- print('Downloading image number: ' + str(i+1))
- res = requests.get(pictureUrl)
- res.raise_for_status()
- # Save the image
- imageFile = open(os.path.join(folder, os.path.basename(str(i+1)) + ".jpg"), 'wb')
- for chunk in res.iter_content(100000):
- imageFile.write(chunk)
- imageFile.close()
- print('\nAll images downloaded.\n')
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement