【问题标题】:Download photo of instagram with python用python下载instagram的照片
【发布时间】:2020-06-04 11:27:55
【问题描述】:

我有一个问题,我似乎找不到答案。 我想要达到的目标: 下载个人页面上的第一张照片。

我打算使用 chromedriver 执行此操作,然后获取 scontent-link 的 HTML 标记。 之后,我可能会编写一些代码,使用链接将照片下载到我电脑上的特定文件夹中。

我想参考的代码是:

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import os

#set up chromedriver
chromedriver = "E:/Instabot/chromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
actions = ActionChains(driver)

base_url = "https://www.instagram.com/"
handle="username"
driver.get(base_url+handle)

#go to a picture images[n] is the number of the picture in their feed
images = driver.find_elements_by_class_name("_bz0w")
image_curr = images[1].find_element_by_tag_name("a").get_attribute("href")
driver.get(image_curr)

#Find the HTML class that has the like count
likes = driver.find_elements_by_class_name("Nm9Fw")
Like_list =[]

for l in likes:
   likes = l.find_element_by_css_selector('span').get_attribute("textContent")
   #print(str(likes))
   Like_list.append(likes)
   listToStr = ' '.join([str(elem) for elem in Like_list])
   #print(listToStr)

df = pd.DataFrame({"Likes:": Like_list})
df.to_csv("instagram_likes.txt", index=False)

我使用此代码从帖子中提取点赞数。 我不是一个熟练或高级的程序员,所以我的代码可能很乱......

希望有人能帮我解决这个问题!

【问题讨论】:

  • 我想知道beautifulsoup包会不会更简单; stackoverflow.com/questions/18497840/…
  • 您可以使用 Selenium 查找此图像的路径,但稍后您可能需要requestsurllib 来下载它。

标签: python selenium


【解决方案1】:

您可以使用 Selenium 获取图像src,但稍后您需要requestsurllib 来下载它

import requests

# ... selenium code ... 

img_src = driver.find_element_by_xpath('//div/img').get_attribute("src")
print('img:', img_src)

r = requests.get(img_src)

fp = open('image.jpg', 'wb') # it has to be `bytes` mode
fp.write(r.content) # it has to be `r.content, not `r.text`
fp.close()

编辑:我用来测试它的完整代码。

from selenium import webdriver
import requests

#set up chromedriver
#chromedriver = "E:/Instabot/chromedriver.exe"
#os.environ["webdriver.chrome.driver"] = chromedriver
#driver = webdriver.Chrome(chromedriver)
driver = webdriver.Firefox()

base_url = "https://www.instagram.com/"
handle = "nobody"  # it is real name
driver.get(base_url+handle)

images = driver.find_elements_by_class_name("_bz0w")

# first get all `href` as text
# because after using `driver.get()` it will lost access to objects on page
images_href = []
for img in images:
    href = img.find_element_by_tag_name("a").get_attribute("href")
    images_href.append(href)

# now we can get all images
for number, href in enumerate(images_href):
    driver.get(href)

    img_src = driver.find_element_by_xpath('//div/img').get_attribute("src")
    print('img:', img_src)

    r = requests.get(img_src)
    filename = f'image-{number}.jpg' 
    with open(filename, 'wb') as fp:
        fp.write(r.content)

【讨论】:

  • 谢谢!你知道我如何使用 selenium 获取图像 src 吗?
  • 啊抱歉没看到!非常感谢您的时间和精力!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多