ins视频批量下载,instagram批量爬取视频信息

简介

Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。
我们使用selenium获取目标用户的 HTML 源代码,并将其保存在本地:

def get_html_source(html_url):option = webdriver.EdgeOptions()option.add_experimental_option("detach", True)# option.add_argument("--headless")  # 添加这一行设置 Edge 浏览器为无头模式  不会显示页面# 实例化浏览器驱动对象,并将配置浏览器选项driver = webdriver.Edge(options=option)# 等待元素出现,再执行操作driver.get(html_url)time.sleep(3)# ===============模拟操作鼠标滑轮====================i=1while True:# 1. 滚动至页面底部last_height = driver.execute_script("return document.body.scrollHeight")driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(4)# 2. 检查是否已经滚动到底部new_height = driver.execute_script("return document.body.scrollHeight")if new_height == last_height:breaklogger.info(f"Scrolled to page{i}")i += 1html_source=driver.page_sourcedriver.quit()return html_source
total_html_source = get_html_source(f'https://imn/{username}/')
with open(f'./downloads/{username}/html_source.txt', 'w', encoding='utf-8') as file:file.write(total_html_source)

然后,我们遍历每个帖子,提取相关信息并下载对应的图片或视频:,注意不同类型的帖子,下载爬取方式不一样


def downloader(logger,downlod_url,file_dir,file_name):logger.info(f"====>downloading:{file_name}")# 发送 HTTP 请求并下载视频response = requests.get(downlod_url, stream=True)# 检查请求是否成功if response.status_code == 200:# 创建文件目录if not os.path.exists("downloads"):os.makedirs("downloads")# 获取文件大小total_size = int(response.headers.get('content-length', 0))# 保存视频文件# file_path = os.path.join(file_dir, file_name)with open(file_path, "wb") as f, tqdm(total=total_size, unit='B', unit_scale=True, unit_divisor=1024, ncols=80, desc=file_name) as pbar:for chunk in response.iter_content(chunk_size=1024):if chunk:f.write(chunk)pbar.update(len(chunk))logger.info(f"downloaded and saved as {file_path}")return file_pathelse:logger.info("Failed to download .")return "err"def image_set_downloader(logger,id,file_dir,file_name_prx):logger.info("downloading image set========")image_set_url="https://imm"+idhtml_source=get_html_source(image_set_url)# # 打开或创建一个文件用于存储 HTML 源代码# with open(file_dir+file_name_prx+".txt", 'w', encoding='utf-8') as file:#     file.write(html_source)
# 4、解析出每一个帖子的下载url downlod_urldownload_pattern = r'data-proxy="" data-src="([^"]+)"'matches = re.findall(download_pattern, html_source)download_file=[]# # 输出匹配到的结果for i, match in enumerate(matches, start=1):downlod_url = match.replace("amp;", "")file_name=file_name_prx+"_"+str(i)+".jpg"download_file.append(downloader(logger,downlod_url,file_dir,file_name))desc_pattern = r'<div class="desc">([^"]+)follow'desc_matches = re.findall(desc_pattern, html_source)desc=""for match in desc_matches:desc=matchlogger.info(f"desc:{match}")return desc,download_filedef image_or_video_downloader(logger,id,file_dir,file_name):logger.info("downloading image or video========")image_set_url="https://im"+idhtml_source=get_html_source(image_set_url)# # 打开或创建一个文件用于存储 HTML 源代码# with open(file_dir+file_name+".txt", 'w', encoding='utf-8') as file:#     file.write(html_source)
# 4、解析出每一个帖子的下载url downlod_urldownload_pattern = r'href="(https://scontent[^"]+)"'matches = re.findall(download_pattern, part)# # 输出匹配到的结果download_file=[]for i, match in enumerate(matches, start=1):downlod_url = match.replace("amp;", "")download_file.append(downloader(logger,downlod_url,file_dir,file_name))# 文件名desc_pattern = r'<div class="desc">([^"]+)follow'desc_matches = re.findall(desc_pattern, html_source)desc=""for match in desc_matches:desc=matchlogger.info(f"desc:{match}")return desc,download_file
parts = total_html_source.split('class="item">')
posts_number = len(parts) - 2logger.info(f"posts number:{posts_number} ")for post_index, part in enumerate(parts, start=0):id = ""post_type = ""post_time = ""if post_index == 0 or post_index == len(parts) - 1:continuelogger.info(f"==================== post {post_index} =====================================")# 解析出每个帖子的时间和 IDtime_pattern = r'class="time">([^"]+)</div>'matches = re.findall(time_pattern, part)for match in matches:post_time = matchlogger.info(f"time:{match}")id_pattern = r'<a href="([^"]+)">'id_matches = re.findall(id_pattern, part)for match in id_matches:id = matchlogger.info(f"id:{id}")# 根据帖子类型进行下载if '#ffffff' in part:post_type = "Image Set"logger.info("post_type: Image Set")image_name_pex = "img" + str(post_index)desc, post_contents = image_set_downloader(logger, id, image_dir, image_name_pex)elif "video" in part:post_type = "Video"logger.info("post_type: Video")video_name = "video" + str(post_index) + ".mp4"desc, post_contents = image_or_video_downloader(logger, id, video_dir, video_name)else:logger.info("post_type: Image")post_type = "Image"img_name = "img" + str(post_index) + ".jpg"desc, post_contents = image_or_video_downloader(logger, id, image_dir, img_name)# 将信息写入 Excel 文件exceller.write_row((post_index, post_time, post_type, desc, ', '.join(post_contents)))

最后,我们调用上述定义的函数,实现图片/视频的下载和 Excel 文件的写入。

结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

源码

想要获取源码的小伙伴加v:15818739505 ,手把手教你部署使用哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/310723.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyskl手势/动作识别的实现与pytorch cuda环境部署保姆教程

恭喜你&#xff0c;找到这篇不需要翻墙就能够成功部署的方法。在国内布置这个挺麻烦的&#xff0c;其他帖子会出现各种问题不能完全贯通。便宜你了。。 实话5年前我用1080训练过一个基于卷积和ltsm的手势识别&#xff0c;实话实说感觉比现在效果好。是因为现在的注意力都在tra…

贝叶斯网络

贝叶斯网络&#xff0c;又称为贝叶斯信念网络或贝叶斯网络模型&#xff0c;是一种概率图模型&#xff0c;由代表变量节点及连接这些节点的有向边构成。这种网络模型由Judea Pearl于1985年首次提出&#xff0c;用于表示和分析变量之间概率关系&#xff0c;从而进行不确定性推理。…

参会记录|全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS‘2024)

前言&#xff1a;2024年4月13日上午&#xff0c;我与实验室的诸位伙伴共聚江西南昌的玉泉岛大酒店&#xff0c;参加了为期一天半的全国多媒体取证暨第三届多媒体智能安全学术研讨会&#xff08;MAS’2024&#xff09;。本届学术研讨会由江西省计算机学会、江西省数字经济学会主…

自然语言处理: 第二十七章LLM训练超参数

前言: LLM微调的超参大致有如下内容,在本文中&#xff0c;我们针对这些参数进行解释 training_arguments TrainingArguments(output_dir"./results",per_device_train_batch_size4,per_device_eval_batch_size4,gradient_accumulation_steps2,optim"adamw_8bi…

【翻译】再见, Clean Code!

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 【翻译】再见, Clean Code!正文那是一个深夜次日早晨这只是一个阶段 【翻译】再见…

面试八股——JVM★

类加载 类加载器的定义 类加载器的类别 类装载的执行过程 类的装载过程&#xff1a; 加载&#xff1a; 验证&#xff1a; 准备&#xff1a; 这里设置初始值并不是传统意义的设置初始值&#xff08;那个过程在初始化阶段&#xff09;。 解析&#xff1a; 初始化&#xff1a; …

微信小程序|自定义弹窗组件

目录 引言小程序的流行和重要性自定义弹出组件作为提升用户体验和界面交互的有效方式什么是自定义弹出组件自定义弹出组件的概念弹出层组件在小程序中的作用和优势为什么需要自定义弹出组件现有的标准弹窗组件的局限性自定义弹出组件在解决这些问题上的优势

基于Springboot的校园闲置物品交易网站

基于SpringbootVue的校园闲置物品交易网站的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 商品信息展示 商品资讯 后台管理 后台首页 用户管理 商品类型管…

《系统架构设计师教程(第2版)》第9章-软件可靠性基础知识-04-软件可靠性设计

文章目录 1. 容错设计技术1.1 恢复块设计1.2 N版本程序设计1.3 冗余设计 2. 检错技术3. 降低复杂度设计4. 系统配置中的容错技术4.1 双机热备技术4.1.1 双机热备模式4.1.2 双机互备模式4.1.3 双机双工 4.2 服务器集群技术 1. 容错设计技术 1.1 恢复块设计 恢复块设计 选择一组…

用于 SQLite 的异步 I/O 模块(二十四)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite的PRAGMA 声明&#xff08;二十三&#xff09; 下一篇&#xff1a;SQLite、MySQL 和 PostgreSQL 数据库速度比较&#xff08;本文阐述时间很早比较&#xff0c;不具有最新参考性&#xff09;&#xff08;二…

亚马逊、沃尔玛自养号测评技术解析:如何降低潜在风险

亚马逊等电商平台在全球范围内迅速扩张&#xff0c;竞争愈发激烈。为提升产品排名和销量&#xff0c;众多卖家选择采用自养号测评的策略。然而&#xff0c;自养号测评技术并非完美无缺&#xff0c;它存在着一定的技术局限性。由于缺乏对自养号原理及底层环境搭建的深入理解&…

华为配置通过流策略实现流量统计

配置通过流策略实现流量统计示例 组网图形 图1 配置流策略实现流量统计组网图 设备 接口 接口所属VLAN 对应的三层接口 IP地址 SwitchA GigabitEthernet1/0/1 VLAN 10 - - GigabitEthernet1/0/2 VLAN 20 - - GigabitEthernet1/0/3 VLAN 10、VLAN 20 - - S…

MapReduce原理简介

MapReduce 是一种用于处理大规模数据集的编程模型和计算框架&#xff0c;最初由 Google 提出&#xff0c;并被 Hadoop 等开源项目广泛应用。它主要包括两个阶段&#xff1a;Map 阶段和 Reduce 阶段。下面是 MapReduce 的基本原理&#xff1a; 图示不错 MapReduce 的基本原理&…

Java的Future机制详解

Java的Future机制详解 一、为什么出现Future机制二、Future的相关类图2.1 Future 接口2.2 FutureTask 类 三、FutureTask的使用方法四、FutureTask源码分析4.1 state字段4.2 其他变量4.4 构造函数4.5 run方法及其他 一、为什么出现Future机制 常见的两种创建线程的方式。一种是…

开源模型应用落地-chatglm3-6b-gradio-入门篇(七)

一、前言 早前的文章&#xff0c;我们都是通过输入命令的方式来使用Chatglm3-6b模型。现在&#xff0c;我们可以通过使用gradio&#xff0c;通过一个界面与模型进行交互。这样做可以减少重复加载模型和修改代码的麻烦&#xff0c; 让我们更方便地体验模型的效果。 二、术语 2.…

《剑指 Offer》专项突破版 - 面试题 110 : 所有路径(C++ 实现)

题目链接&#xff1a;所有路径 题目&#xff1a; 一个有向无环图由 n 个节点&#xff08;标号从 0 到 n - 1&#xff0c;n > 2&#xff09;组成&#xff0c;请找出从节点 0 到节点 n - 1 的所有路径。图用一个数组 graph 表示&#xff0c;数组的 graph[i] 包含所有从节点 …

组件与组件之间的传递-事件总线

两个组件之间的数据传递&#xff08;属于非父子组件通讯&#xff09; 当项目中只是两个组件的少量数据传递时使用事件总线这种方法会比较方便&#xff0c;但当遇到大量数据传递时推荐使用vuex 思路 组件与组件之间不能直接传递&#xff0c;这是候可以创建一个EventBus.js文件…

ELK日志分析系统之Zookeeper

一、Zookeeper简介 ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务&#xff0c;它提供了一项基本服务&#xff1a;分布式锁服务。分布式应用可以基于它实现更高级的服务&#xff0c;实现诸如同步服务、配置维护和集群管理或者命名的服务。 Zookeepe…

力扣:49. 字母异位词分组

知识点&#xff1a; 散列函数 散列函数能使对一个数据序列的访问过程更加迅速有效&#xff0c;通过散列函数&#xff0c;数据元素将被更快地定位&#xff1a; 1. 直接寻址法&#xff1a;取关键字或关键字的某个线性函数值为散列地址。即H&#xff08;key&#xff09;key或H&a…

计算机网络 Cisco路由器基本配置

一、实验内容 1、按照下表配置好PC机IP地址和路由器端口IP地址 2、配置好路由器特权密文密码“abcd&#xff0b;两位班内序号”和远程登录密码“star” 3、验证测试 a.验证各个接口的IP地址是否正确配置和开启 b.PC1 和 PC2 互ping c.验证PC1通过远程登陆到路由器上&#…