教程:如何搜索社交媒体

文章目录

  • 一、使用 Python 搜索 Telegram
    • 1.1. 第 1 步 - 设置代理
    • 1.2. 第 2 步 - 安装 Telethon 库
    • 1.3. 第 3 步 - 创建数据库文件并登录
    • 1.4. 第 4 步 - 创建结果列表
    • 1.5. 第 5 步 - 选择要搜索成员的组
    • 1.6. 第 6 步 - 导出所有成员的详细信息
    • 1.7. 第 7 步 - 将导出的数据存储到 .csv 文件中

一、使用 Python 搜索 Telegram

1.1. 第 1 步 - 设置代理

数据中心代理足以胜任 Telegram 搜索,因此本教程将继续使用数据中心代理。下面介绍如何验证数据中心 IP:

• 登录 Smartdaili 控制面板。
• 按左侧菜单上的 Datacenter,选择定价,然后选择适合您需求的最佳方案。
• 然后转到身份验证方法。对于数据中心代理,只有 user:pass 方法可用。

不要忘记更改地址、端口、用户名和密码值。

proxy = {'proxy_type': 'http', 'addr': '1.1.1.1',      'port': 5555,           'username': 'your_username',      'password': 'your_pass',      
}

1.2. 第 2 步 - 安装 Telethon 库

Telethon 是 Python 3 MTProto 库,可与 Telegram API 配合使用。将其添加到您的代码中:

python pip install telethon

1.3. 第 3 步 - 创建数据库文件并登录

现在,我们需要从所选库中导入同步模型和步骤 1 中的凭证。不要忘记更改 api_id、api_hash、电话线和代理信息。

from telethon.sync import TelegramClient
api_id = 123456
api_hash = 'YOUR_API_HASH'
phone = '+111111111111'
TelegramClient(phone, api_id, api_hash, proxy={'proxy_type': python_socks.ProxyType.HTTP, 'addr': '1.1.1.1',  'port': 5555, 'username': 'your_username', 'password': 'your_pass'})

我们建议您再次登录 Telegram 帐户,检查是否已获得正确授权。如果没有,请申请一个 OTP 码并输入收到的代码:

client.connect()
if not client.is_user_authorized():client.send_code_request(phone)
client.sign_in(phone, input('Enter the code: '))

成功登录后,您会看到创建了一个 .session 类型的文件,这就是您的永久数据库文件。

1.4. 第 4 步 - 创建结果列表

现在需要创建一个空聊天列表,并将从 GetDialogsRequest 收到的信息填入其中。为此,您还需要添加 InputPeerEmpty 函数。下面是这部分代码的样子:

from telethon.tl.functions.messages import GetDialogsRequest
from telethon.tl.types import InputPeerEmpty
chats = []
last_date = None
chunk_size = 200
groups=[]result = client(GetDialogsRequest(offset_date=last_date,offset_id=0,offset_peer=InputPeerEmpty(),limit=chunk_size,hash = 0))
chats.extend(result.chats)

请注意,会话是使用 offset_date 和 offset_peer 过滤的。我们为这些参数提供空值,以便 API 返回所有聊天记录。我们还为分页设置了 offset_id 和 limit。在这种情况下,您最终会看到用户最近的 200 条聊天记录。
我们假设您只对巨型群组感兴趣,因此要检查此属性是否为真,请添加这部分代码:

for chat in chats:try:if chat.megagroup== True:groups.append(chat)except:Continue

当然,并非所有聊天都有一个超级群组。这就是例外部分能确保一切正常的原因。

1.5. 第 5 步 - 选择要搜索成员的组

现在,当你列出了所有的群组后,就可以选择要搜索成员详细信息的群组了。在运行过程中,代码会遍历上一步中存储的每个组,打印出每个组以数字开头的名称。这个数字就是组列表的索引。

print('Choose a group to scrape members from:')
i=0
for g in groups:print(str(i) + '- ' + g.title)i+=1

输入与特定组相关的编号作为索引:

g_index = input("Enter a Number: ")
target_group=groups[int(g_index)]

1.6. 第 6 步 - 导出所有成员的详细信息

要导出所选 Telegram 群组的所有成员,请使用 get_participants 函数创建一个空列表。

print('Fetching Members...')
all_participants = []
all_participants = client.get_participants(target_group, aggressive=True)

需要注意的是,如果将 aggressive 设置为 true,就有可能导出超过 10K 的群组成员。激活该参数后,Telethon 通常会导出列表中 90% 以上的联系人。

1.7. 第 7 步 - 将导出的数据存储到 .csv 文件中

最后,是时候将所有数据转换成可读性更强的格式以便进一步分析了。如果成员的用户名是非 ASCII 格式(这在 Telegram 用户中很常见,没有上限),我们将使用 UTF-8 编码。
因此,首先在写入模式下打开 .csv 文件,并命名文件头。然后,使用循环将所有参与者列表中的每个项目写入 CSV 文件。

print('Saving In file...')
with open("members.csv","w",encoding='UTF-8') as f:writer = csv.writer(f,delimiter=",",lineterminator="\n")writer.writerow(['username','user id', 'access hash','name','group', 'group id'])for user in all_participants:if user.username:username= user.usernameelse:username= ""if user.first_name:first_name= user.first_nameelse:first_name= ""if user.last_name:last_name= user.last_nameelse:last_name= ""name= (first_name + ' ' + last_name).strip()writer.writerow([username,user.id,user.access_hash,name,target_group.title, target_group.id])      
print('Members scraped successfully.')

请注意,并非所有用户都有用户名、姓名或姓氏。没有用户名的用户将被命名为 “无”。
对于某些组,整个导出过程可能需要几分钟,但工作完成后,你应该会收到 “成员已成功清除 ”的提示。这样,你的工作就完成了!

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

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

相关文章

mysql中出现错误1138-Invalid use of NULL value

问题:1138-Invalid use of NULL value 解决: 问题是当前字段中,有null的值,简单来说就是,你表里有空值,不能设置不为空!!! 把空的值删掉重新设计就好了

LaTex插入图片

LaTeX 提供了许多定制化图片的功能。这篇文章将会介绍如何用最常见的格式插入图片、缩放图片以及如何在文档中引用这些图片。 1.基本使用 效果图如图所示。 \documentclass{article} \usepackage{graphicx} \graphicspath{ {./figure/} }\begin{document}\begin{figure}[!t]…

大数据环境下的数据提取挑战

在大数据环境下,数据提取面临着多方面的挑战。这些挑战不仅源于数据本身的特性和复杂性,还涉及到技术、资源、法律等多个层面。以下是对这些挑战的具体分析: 1. 数据质量与准确性 数据质量问题:大数据环境下,数据来源…

JUC-Synchronized原理进阶

轻量级锁 轻量级锁的使用场景:如果一个对象虽然有多线程要加锁,但加锁的时间是错开的(也就是没有竞争),那么可以使用轻量级锁来优化。轻量级锁对使用者是透明的,即语法仍然是 synchronized 假设有两个方法同…

opencv处理图片(实战指南)

一、OpenCV简介 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它拥有众多的图像处理和计算机视觉功能,包括各种常用的图像处理技术,如滤波、边缘检测、特征提取等。OpenCV支持多种编程语…

UDP 和TCP的应用

一、网络模型 (一)C/S 模型 客户端 / 服务器(Client/Server,C/S)模型是一种常见的网络架构。在这种模型中,客户端是主动的角色,向服务器发起请求;服务器端是被动的角色,…

electron-vite封装UI级的消息提示

说明 Electron Vite Vue3 Element Plus Electron中写提示有两种方案: 系统级:electron带的dialog相关APIUI级:UI框架内部的提示,如ElMessage、ElMessageBox、ElNotification等 今天来封装一下UI级别的提示 代码 效果图 源…

Springboot 定时任务cron表达式

Cron表达式是一个强大的字符串,用于在Unix/Linux系统中配置cron job(计划任务)的时间表。然而,在Spring框架(包括Spring Boot)中,Cron表达式也被广泛使用于Scheduled注解中,以定义定…

LLM之基于llama-index部署本地embedding与GLM-4模型并初步搭建RAG(其他大模型也可,附上ollma方式运行)

前言 日常没空,留着以后写 llama-index简介 官网:https://docs.llamaindex.ai/en/stable/ 简介也没空,以后再写 注:先说明,随着官方的变动,代码也可能变动,大家运行不起来,可以进…

巡检机器人的使用方法和维护保养

在当今快速发展的工业环境中,智能巡检机器人正逐渐成为提升运维效率和安全性的重要工具。旗晟机器人凭借其核心技术团队和多年的行业经验,推出了多款高效、智能的巡检机器人,旨在帮助企业实现设备运维的智能化升级。本文将介绍旗晟巡检机器人…

存储与传输/大小端字节序的概念、决定因素、给编程带来的困扰

文章目录 概述大小端分歧的类比为什么要关注字节序NET网络字节序什么时候必须转换字节序大小端字节序哪个优秀判断系统字节序类型字节序类型转换大小端内存监视和调试 谁决定了大小端模式CPU架构决定大小端操作系统影响大小端?编译器也影响大小端?可配置…

反射型XSS

反射型XSS(Cross-Site Scripting)是一种Web安全漏洞,它发生在当Web应用程序将用户输入的数据“反射”回浏览器,而没有进行适当的处理或编码时。这种类型的XSS攻击是非持久化的,意味着恶意脚本不会被永久存储在服务器上…

【威锋网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

深度解析:常见本地大模型知识库工具部署、微调与对比,个人高效选型指南!

常见本地大模型知识库工具 LLM knowledge base 这里先盘点一下最近比较火爆的几个工具,将从知识库侧和大模型侧分别介绍。 01 知识库侧 知识库侧主要是指更加偏向于能够直接读取文档并处理大量信息资源,包括文档上传、自动抓取在线文档,…

Linux下进程间的通信--信号

信号的概念: 在Linux操作系统中,信号是一种软件中断机制,用于通知进程某个事件已经发生。信号是Linux进程间通信(IPC)的一种简单且快速的方式,它可以用来处理各种异步事件,如用户输入、硬件事件…

mysql 修改表的名字

mysql 修改表的名字 rename命令用于修改表名。 rename命令格式:rename table 原表名 to 新表名; 例如,在表MyClass名字更改为YouClass: mysql> rename table MyClass to YouClass; 当你执行 RENAME 时,你不能有任何锁定的表…

Redis (day 3)

一、通过jedis连接数据库 1.首先导入依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.1.0</version></de…

自己做的一个用于生成DICOM文件的服务器

框架: .ner core web api .net8.0 Program.cs代码如下 using Microsoft.AspNetCore.HttpsPolicy; using System.Diagnostics;namespace PacsServer {/* public class Program{public static void Main(string[] args){//配置服务var builder WebApplication.CreateBuilder(a…

(第三十三天)

1. 设置主从从 mysql57 服务器 &#xff08; 1 &#xff09;配置主数据库 [rootmsater_5 ~] # systemctl stop filewalld [rootmsater_5 ~] # setenforce 0 [rootmsater_5 ~] # systemctl disable filewalld [rootmsater_5 ~] # ls anaconda-ks.cfg mysql-5.7.44-linux-g…

Python实现贪心算法

目录 贪心算法简介贪心算法的基本思想贪心算法的应用场景活动选择问题 Python实现活动选择问题代码解释活动选择问题的解贪心算法的正确性分析贪心算法的其他应用贪心算法的局限性贪心算法的优化与变种总结 贪心算法简介 贪心算法&#xff08;Greedy Algorithm&#xff09;是一…