使用Python下载 Instagram 个人资料图片
Instagram 是 Facebook 旗下的照片和视频共享社交网络服务, Python为 Instagram 的网页抓取提供了强大的工具。
所需模块和安装:
要求:
pip install requests
概念 -
对于给定的用户配置文件,打开view-source并找到“profile_pic_url_hd” 。要找到按 ctrl+f 并输入“profile_pic_url_hd” ,链接就是我们的数据或个人资料图片。
该链接将如下所示:
https://scontent-bom1-1.cdninstagram.com/vp/d2df9b2d162969e87200984ee763cc27/5DC590F2/t51.2885-19/s320x320/61851740_845288152518430_7068999703693623296_n.jpg?_nc_ht=scontent-bom1-1.cdninstagram.com
以下是该项目的逐步实施:
第一步:导入所有依赖
Python3
import requests
from bs4 import BeautifulSoup as bs
import json
import random
import os.path
Python3
insta_url='https://www.instagram.com'
inta_username= input('enter username of instagram : ')
response = requests.get(f"{insta_url}/{inta_username}/")
Python3
if response.ok:
html=response.text
bs_html=bs(html, features="lxml")
bs_html=bs_html.text
index=bs_html.find('profile_pic_url_hd')+21
remaining_text=bs_html[index:]
remaining_text_index=remaining_text.find('requested_by_viewer')-3
string_url=remaining_text[:remaining_text_index].replace("\\u0026","&")
print(string_url, "\n \n downloading..........")
Python3
while True:
filename='pic'+str(random.randint(1, 100000))+'.jpg'
file_exists = os.path.isfile(filename)
if not file_exists:
with open(filename, 'wb+') as handle:
response = requests.get(string_url, stream=True)
if not response.ok:
print(response)
for block in response.iter_content(1024):
if not block:
break
handle.write(block)
else:
continue
break
print("\n downloading completed ..............")
Python3
import instaloader
ig = instaloader.Instaloader()
dp = input("Enter Insta username : ")
ig.download_profile(dp , profile_pic_only=True)
第 2 步:询问用户名并向 Instagram 发送回复。
Python3
insta_url='https://www.instagram.com'
inta_username= input('enter username of instagram : ')
response = requests.get(f"{insta_url}/{inta_username}/")
第三步:如果回复正常,找到头像链接
(注意:将 string_url 中的 '\\u0026' 替换为 '&' 以删除错误的 URL 时间戳或错误的 URL 哈希错误)
Python3
if response.ok:
html=response.text
bs_html=bs(html, features="lxml")
bs_html=bs_html.text
index=bs_html.find('profile_pic_url_hd')+21
remaining_text=bs_html[index:]
remaining_text_index=remaining_text.find('requested_by_viewer')-3
string_url=remaining_text[:remaining_text_index].replace("\\u0026","&")
print(string_url, "\n \n downloading..........")
第 4 步:现在,创建一个循环并下载照片。
Python3
while True:
filename='pic'+str(random.randint(1, 100000))+'.jpg'
file_exists = os.path.isfile(filename)
if not file_exists:
with open(filename, 'wb+') as handle:
response = requests.get(string_url, stream=True)
if not response.ok:
print(response)
for block in response.iter_content(1024):
if not block:
break
handle.write(block)
else:
continue
break
print("\n downloading completed ..............")
输出:
其他方法:
我们只需提供用户的 Instagram 句柄,就可以使用 instaloader 模块下载任何 Instagram 帐户的个人资料图片。
首先我们需要安装 instaloader 模块:
pip install instaloader
例子:
Python3
import instaloader
ig = instaloader.Instaloader()
dp = input("Enter Insta username : ")
ig.download_profile(dp , profile_pic_only=True)
输出:当我们输入用户 id 时,配置文件图片将被下载到同一目录中。