教程:如何搜索社交媒体

一、使用 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.username
        else:
            username= ""
        if user.first_name:
            first_name= user.first_name
        else:
            first_name= ""
        if user.last_name:
            last_name= user.last_name
        else:
            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.')

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

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值