一、引言
在当今数字化浪潮中,社交媒体已深深融入人们的日常生活,并为企业、研究机构及个体研究者提供了宝贵的数据资源。从Twitter、Facebook、Instagram、LinkedIn等多元化平台高效采集数据,并进行深入分析,我们能够洞察用户行为、市场动向、公众情感等关键信息。这些信息对于市场分析、社会研究、品牌监控及其他各种分析工作至关重要。
本文旨在通过案例,探讨在社交媒体数据采集与分析的实战方法,为研究和工作提供坚实的数据支撑。
二、IPS代理简介
在采集社交媒体数据之前,我们首先要解决一个核心问题:社交媒体平台对IP的属性做判断,导致无法高效采集数据。一方面,社交媒体平台在推送时会确保所推送的内容与当地的文化和用户偏好相符合,另一方面,社交媒体平台会检测和阻止异常流量,一旦单次访问次数过多,便可能触发强制验证。
这时,ISP代理的引入就显得尤为重要。ISP代理首先能够模拟地区,有效保护在线隐私,减少被追踪和识别。其次,它能够确保用户顺畅地访问所需内容,提升数据获取的效率和便捷性。此外,ISP代理还提供了额外的安全层,能够过滤钓鱼网站和陷阱类的内容,有效防止恶意攻击和数据泄露的风险。在企业环境中,其还能够显著加快网页访问速度,降低带宽使用,同时通过负载均衡技术提升网络性能和稳定性。
三、应用实践——基于Ownips和coze的社媒智能分析助手
3.1、Twitter趋势数据采集
3.1.1、Twitter趋势数据接口分析
打开推特网页我们可以发现,整个趋势榜是一个div盒子。
每一个项目都是一个子div,包含在主div下。而文字部分包含在其中的一个span下。于是可以得到结构如下:
其中,
这个
容器包含了所有的趋势数据。每个趋势项由类似于
... 趋势内容 ...
的结构组成。例如,Celtics 表示一个趋势项,内容为“Celtics”。
依据结构可以写出xpath如下:
//div[@aria-label="时间线:探索"]/div/div//div/div/div/div/div[2]/span
测试一下,可以发现确实选出了所有的项目,后期只要提取其中的文字即可。
3.1.2、Ownips原生住宅IPS选取与配置
点击获取代理,即可使用刚才购买的IP,这里支持两种使用方式,一种是通过API自动获取,一种是通过设置账号定向访问。这里我们先选择API方式。选定国家和地区,点击生成链接即可在右侧得到登录链接。接下来我们尝试获取代理。点击账户认证获取,选择国家和地区,之后要选择认证账户,这里我们先去创建一个。
在账密认证中选择认证账户管理,选择添加。设置好账号密码即可。
回到账户获取代理中,选择刚才创建的账号,即可使用。
3.1.3、数据采集
这里我们采用python的request库获取网页,并通过xpath解析页面数据,最后保存为txt文件。
首先,导入必要的模块,包括requests用于发送HTTP请求,BeautifulSoup用于解析HTML,_thread用于多线程处理,和time用于时间延迟。之后需要设置模拟浏览器的请求头和目标URL。
import requests as rq from bs4 import BeautifulSoup import _thread import time headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0", } api = 'https://api-proxy.ownips.com/getIsp?num=1&type=1&lb=1&sb=0&flow=1®ions=tw&attribute=native_isp' url = 'https://x.com/explore/tabs/keyword'
procPage函数使用BeautifulSoup解析HTML内容,其中,首先通过BeautifulSoup(page, 'html.parser')
来创建一个soup
对象,这个对象会解析传入的HTML页面page
,然后,使用xpath
方法来定位具有特定aria-label
属性的子元素。
def procPage(page): soup = BeautifulSoup(page, 'html.parser') divs = soup.xpath('//div[@aria-label="时间线:探索"]/div/div') r = [] for i in range(2, len(divs)): r.append(divs[i].xpath('//div/div/div/div/div[2]/span//text()')) print("解析完毕") return r
testUrl函数定义了一个名为 proxy
的字典,用于设置代理服务器信息,通过代理发送GET请求到目标URL,这个请求包含了之前定义的 headers
字典,用于模拟浏览器发送请求,以避免被目标网站拒绝。最后,函数调用 procPage
函数来解析网页内容。它将 res.content
(即响应内容的二进制数据)作为参数传递给 procPage
,并将结果写入一个文件。此处隐去ip消息。
def testUrl(): proxy = {'http': 'http://yyyyyyy:yyy3214@38.182.xxx.xxx:2333', 'https': 'https://yyyyyyy:yyy3214@38.182.xxx.xxx:2333', } try: res = rq.get(url=url, headers=headers, proxies=proxy) print("获取成功,正在解析") d = procPage(res.content) with open('trend.txt', 'w', encoding='utf-8') as f: f.write(str(d)) except Exception as e: print("访问失败", e)
主线程启动10个并发线程,每个线程调用testUrl,并在每个线程启动后延迟0.1秒,最终主线程延迟10秒以确保所有子线程完成任务。
for port in range(0, 10): _thread.start_new_thread(testUrl, ()) time.sleep(0.1) time.sleep(10)
运行一下,得到结果如下:
完整代码如下:
import requests as rq from bs4 import BeautifulSoup import _thread import time headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0", } api = 'https://api-proxy.ownips.com/getIsp?num=1&type=1&lb=1&sb=0&flow=1®ions=tw&attribute=native_isp' url = 'https://x.com/explore/tabs/keyword' def procPage(page): soup = BeautifulSoup(page, 'html.parser') divs = soup.xpath('//div[@aria-label="时间线:探索"]/div/div') r = [] for i in range(2, len(divs)): r.append(divs[i].xpath('//div/div/div/div/div[2]/span//text()')) print("解析完毕") return r def testUrl(): proxy = {'http': 'http://yyyyyyy:yyy3214@38.182.xxx.xxx:2333', 'https': 'https://yyyyyyy:yyy3214@38.182.xxx.xxx:2333', } try: res = rq.get(url=url, headers=headers, proxies=proxy) print("获取成功,正在解析") d = procPage(res.content) with open('trend.txt', 'w', encoding='utf-8') as f: f.write(str(d)) except Exception as e: print("访问失败", e) for port in range(0, 10): _thread.start_new_thread(testUrl, ()) time.sleep(0.1) time.sleep(10)
除了趋势数据,将url 替换后,还可以采集以下数据:
- 查询tweet详细数据:https://twitter.com/i/api/graphql/4tzuTRu5-fpJTS7bDF6Nlg/TweetDetail?variables=
- 查询用户screenName:https://twitter.com/i/api/graphql/cYsDlVss-qimNYmNlb6inw/UserByScreenName?variables=
- 查询用户关注者:https://twitter.com/i/api/graphql/5jYTqZAy8gQiTPcAuNNXPg/Following?variables=
- 查询用户追随者:https://twitter.com/i/api/graph
3.2、基于Ownips和Coze的社媒智能助手
3.2.1、Ownips数据采集插件集成
设计好数据采集流程后,我们可以登录https://www.coze.com/home,进入coze官网,点击Personal-Plugins-Create plugin创建插件。
插件就是一个支持调用的服务端接口,可以将自己的 API 通过参数配置的方式快速创建一个插件,然后集成到应用中使用。这里在创建插件的基本信息窗口中,使用在Coze IDE中直接编程,然后IDE的develop runtime改为Python3。
然后为插件创建Tool工具,并将以上已经写好的数据采集脚本放到Tool的核心代码区中并点击发布,从而构建插件的核心功能,插件通过合理使用Ownips的ISP代理,可以更加实时高效和安全地采集Twitter社交媒体数据,为市场分析、学术研究、品牌监测等提供强有力的支持。
3.2.2、创建Twitter Bot智能体
创建好插件后,接下来创建Twitter Bot智能体,回到coze主页,点击Create bot创建智能体,然后选择在Personal工作区,使用AI生成图标,然后点击Confirm确认创建。
进入Bot操作界面后,首先在左侧为Twitter Bot智能体书写提示词,然后将刚刚创建好的插件配置上去,也可以添加一些工作流、图像流、触发器、开场白、Markdown 编辑器、用户问题建议、快捷指令等扩展功能。
以下是可以参考的提示词:
# 角色 你是一位社交媒体智能助手,擅长分析Twitter等社交媒体平台的趋势、热点和关键词,帮助用户洞悉社交媒体上的流行动态,并做出相应反应。 ## 技能 ### 技能1:社交媒体分析 - 连接到Twitter等社交媒体平台的API,实时监测社交平台的主要趋势。 ### 技能2:数据分析 - 对采集的数据进行分析以识别热点和关键词。 ### 技能3:模式识别 - 识别并追踪在推特上的热门话题和流行模式。 ### 技能4:趋势预测 - 根据数据分析模型,预测未来可能出现的热点和趋势。 ## 条件 - 在进行社交媒体分析的过程中,全程遵守社交媒体平台的使用条款和法律规定,保护用户隐私权。 - 提供用户界面,方便用户访问和操作。 - 用户可以自定义通知,当相关趋势出现时推送通知。 ================ 你的目标是为用户节省时间,并提供效率高的信息流。适用于品牌营销、新闻媒体、市场研究等领域。你可以在启动智能助手之前,设置和配置连接到社交媒体平台的API,输入初始化数据,设定分析参数和关键词列表。并随后开启实时监测模式,获取首份趋势数据分析报告。
3.2.3、Twitter 趋势分析效果
创建好成功后,就可以开始使用了,这里可以针对Twitter采集的数据进行分析以识别热点和关键词,无论是市场趋势的预测,还是用户行为的洞察,coze都能为用户提供精准、及时的分析报告,效果如下。
借助Ownips的强大功能,用户们得以轻松访问并获取来自全球各地的全面且真实的数据;而coze的智能分析功能则能够帮助用户从这些数据中提炼出有价值的信息。Ownips与Coze智能分析功能的组合,为用户们提供了一个强大且全面的数据分析工具。无论是市场研究、舆情监测还是商业决策,这一组合都能够为用户提供准确、及时的数据支持,帮助他们更好地把握机遇,实现更大的价值。