Python获取Instagram帖子的所有图像

时间:2020-09-19 11:04:35

标签: python selenium selenium-webdriver selenium-chromedriver screen-scraping

我正在用Python编写代码以提取用户在Instagram上的所有帖子。我已经编写了用于提取Insta用户的12条最新帖子的代码:

import urllib.request as reqq
from selenium import webdriver
import time

url = input("Enter the link:")

start_time = time.time()

browser = webdriver.Chrome("D:\\Python_Files\\Programs\\chromedriver.exe")

browser.get(url)

urls = browser.find_elements_by_css_selector('article > div a')
url_list = []

for element in urls:
    url_list.append(element.get_attribute('href'))
 
count = 1

print("--- %s seconds ---" % (time.time() - start_time))

start_time = time.time()

for x in url_list:
    img_url = ""
    vid_url = ""
    
    browser.maximize_window()
    browser.get(x)
    
    try:        
        vid_url = browser.find_element_by_class_name('_5wCQW').find_element_by_tag_name('video').get_attribute('src')
        reqq.urlretrieve(vid_url,"D:\\instavid"+str(count)+".mp4")        
    except:         
        img_url = browser.find_element_by_class_name('KL4Bh').find_element_by_tag_name('img').get_attribute('src')
        reqq.urlretrieve(img_url,f"D:\\instaimg"+str(count)+".jpg")
    count+=1
    
browser.close()

print("--- %s seconds ---" % (time.time() - start_time))

问题在于,有些帖子包含多张图片。当前代码仅提取多图像帖子的第一张图像。有什么方法可以从多图像帖子中提取所有图像?

1 个答案:

答案 0 :(得分:0)

每当您打开帖子时,都需要检查是否存在正确的V形元素 一类 '。 coreSpriteRightChevron'存在,因此您需要检查该元素是否存在,然后检查其多个图像位置。

这是我在浏览器中找到的选择器路径。

body > div._2dDPU.CkGkG > div.zZYga > div > article > div._97aPb > div > div.pR7Pc > div.Igw0E.IwRSH.eGOV_._4EzTm.O1flK.D8xaz.fm1AK.TxciK.yiMZG > div > button > div

如果选择器返回null / None,则其单个图像发布,否则其多个图像发布。

也要避免使用硒,而要使用instagram的反向工程api。结帐this回购以获取更多详细信息。