我正在用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))
问题是,有一些帖子有多个图片。当前代码仅提取多图像帖子的第一个图像。有没有办法从多图像帖子中提取所有图像?
每次打开post时,您都需要检查右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。查看此回购以了解更多详细信息。