在当今的数字时代,各行业的专业人士都必须及时了解即将举行的活动、会议和研讨会。然而,在浩瀚的在线信息海洋中有效地找到符合自己兴趣的事件是一项重大挑战。
本博客介绍了应对这一挑战的创新解决方案:一个综合应用程序,旨在从 Facebook 抓取事件数据并使用 MyScale。虽然 MyScale 通常与 RAG 技术堆栈相关联或用作矢量数据库,但其功能超出了这些领域。我们将利用它进行数据分析,利用其矢量搜索功能来分析语义相似的事件,从而提供更好的结果和见解。
您可能会注意到,Grok AI 使用 Qdrant 矢量数据库作为搜索引擎从 X(以前称为 Twitter)数据中检索实时信息。您还可以通过将 MyScale 与 Apify 等其他平台集成,以这种方式使用 MyScale 评估矢量数据库的功能,通过开发简单的个性化应用程序来增强日常生活任务。
因此,在本博客中,我们将开发一个仅将城市名称作为输入并从 Facebook 抓取所有相关事件的应用程序。随后,我们将利用MyScale先进的SQL向量能力进行数据分析和语义搜索。
工具和技术
我们将使用多种工具(包括 Apify、MyScale 和 OpenAI)来开发这个有用的应用程序。
- Apify:流行的网络抓取和自动化平台,可显着简化数据收集过程。它提供了抓取数据并随后将其提供给法学硕士的能力。这使我们能够针对实时数据培训法学硕士并开发应用程序。
- MyScale:MyScale 是一个 SQL 矢量数据库,我们用它以优化的方式存储和处理结构化和非结构化数据。
- OpenAI:我们将使用 如何设置 MyScale 和 Apify
要开始设置 MyScale 和 Apify,您需要创建一个新目录和一个 Python 文件。您可以通过打开终端或命令行并输入以下命令来完成此操作:
壳mkdir MyScale cd MyScale 触摸main.ipynb
让我们安装这些软件包。复制下面的命令,并将其粘贴到您的终端中。这些包将提供我们开发应用程序所需的工具和库。
壳pip install openai apify-client clickhouse-connect pandas numpy
这应该在您的系统中安装所有依赖项。要确认所有内容均已正确安装,您可以在终端中输入以下命令。
壳pip 冻结 | egrep '(openai|apify-client|clickhouse-connect|pandas|numpy)'
这应该包括所有已安装的依赖项及其版本。如果发现任何缺少的依赖项,您可能需要重新运行该特定包的安装命令。现在,我们准备在安装后编写代码。
注意:我们将在 Python 笔记本中工作。将每个代码块视为一个笔记本单元。
如何使用 Apify 抓取数据
现在,我们将使用 Apify API 使用 Facebook 活动抓取工具
Python将 pandas 导入为 pd 从 apify_client 导入 ApifyClient # 使用您的 API 令牌初始化 ApifyClient 客户端= ApifyClient(“在此处输入您的apify_key_”) # 准备 Actor 输入 运行输入 = { "searchQueries": ["纽约体育"], “startUrls”:[], “最大事件数”:50, } # 运行 Actor 并等待其完成 run = client.actor("UZBnerCFBo5FgGouO").call(run_input=run_input) df_columns = ['名称', '日期时间', '描述', 'Users_Going', 'Users_Interested', 'Users_Responded', '城市', 'Organized_By', 'Street_Address'] dataframe1 = pd.DataFrame(列=df_columns) 对于 client.dataset(run["defaultDatasetId"]).iterate_items() 中的项目: # 使用字典理解将 None 值替换为空字符串 行={ '名称': item.get('名称', ''), '日期时间': item.get('dateTimeSentence', ''), '描述': item.get('描述', ''), 'Users_Going': item.get('usersGoing', ''), 'Users_Interested': item.get('usersInterested', ''), 'Users_Responded': item.get('usersResponded', ''), '城市': item.get('位置', {}).get('城市', '') if item.get('位置') else '', '组织者': item.get('组织者', ''), 'Street_Address': item.get('location', {}).get('streetAddress', '') if item.get('location') else '' } # 确保所有 None 值都替换为空字符串 row = {k: (v if v is not None else '') for k, v in row.items()} dataframe1 = dataframe1._append(行,ignore_index=True) # 清理数据 dataframe1['描述'] = dataframe1['描述'].replace('\\n', '', regex=True)
此脚本以
pandas
DataFrame 的形式向我们提供即将发生的事件详细信息。