跳转至

使用 Python 进行 Facebook 抓取和情绪分析

在今天的帖子中,我要向您展示如何非常轻松地抓取 Facebook 页面上发布的帖子,如何通过使用 Google NLP API 根据情绪程度和情绪态度进行情绪分析,以及我们如何将这些数据下载到 Excel 文件中。

最后,我要向您解释的是,如何计算不同变量之间的相关性,以便以"Likes"等方式衡量情绪态度或情绪量级的影响。在我看来,这是非常有用的东西,因为这样,你将能够理解哪个是语气或职位的类型,工作最好的这样一个社区。

但是,了解如何正确理解此数据非常重要,例如:

  1. 相关性需要具有统计意义:因此,我们还将计算 p 值。
  2. 相关性并不意味着因果关系:因为可能有很多其他因素没有考虑造成这种影响。

为了能够抓取 Facebook 的帖子,执行情绪分析,将这些数据下载到 Excel 文件中并计算我们将使用以下 Python 模块的相关性:

  1. Facebook 爬虫 :爬 Facebook页面上的帖子。
  2. 谷歌NLP API: 从规模和态度的角度做情绪分析。
  3. Pandas:将数据下载到 Excel 文件中。
  4. Scipy:计算变量之间的皮尔逊相关性。

1.- 在 Facebook 上抓帖子

使用 Facebook 抓取 Python 模块在 Facebook 页面上浏览帖子非常简单。您只需安装此模块并使用以下编写的代码:

1
2
3
4
5
6
from facebook_scraper import get_posts

listposts = []
for post in get_posts("anyfacebookpage", pages=2):
    print(post['text'][:50])
    listposts.append(post)

您需要替换您感兴趣的页面的变量"any facebookpage",并插入要刮取的页数(在我的示例中,我只使用 2)。此代码将打印帖子的标题,并将帖子与字典一起附加在列表中的指标。

字典包含的指标包括:

  1. 发布 ID:此指标的键是 post_id
  2. 文本: 它们对此指标的键是 text
  3. 发布时间:此指标的键为 time
  4. 图像:此指标的键 image,它将返回帖子主图像的链接。
  5. 视频:此指标的键 video,它将返回帖子主图像的链接。
  6. 视频缩略图:此指标的键为 video_thumbnail
  7. 视频 ID:此指标的键是 video_id
  8. 赞数:此指标的键为 likes
  9. 注释数:此指标的键为 comments
  10. 股票数量:此指标的键为 shares
  11. 发布 URL:此指标的键是 post_url
  12. 链接:此指标的键为 link
  13. 图像:如果有多个图像,此变量将存储包含所有图像链接的列表。此指标的关键为images

2.- 进行情绪分析

在抓取了尽可能多的帖子后,我们将使用 Google NLP API 执行情绪分析。为了使用 Google NLP API,首先您需要创建一个项目,启用自然语言服务并获取密钥。你可以找到一些 有关如何设置您的项目在此链接上的信息

正确设置 NLP API 项目后,可以开始使用不同的模块。使用下面的代码,我们将对从 Facebook 页面中刮出的每个出版物执行情绪分析,我们将在帖子列表中附加一个新的字典键,其中每个帖子的大小和态度分数。

import os
from google.cloud import language_v1
from google.cloud.language_v1 import enums
from google.cloud import language
from google.cloud.language import types


os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "yourNLPAPIkey"
client = language_v1.LanguageServiceClient()

for x in range (len(listposts)):

    try:

        document = types.Document(content=listposts[x]["text"], type=enums.Document.Type.PLAIN_TEXT)
        sentiment = client.analyze_sentiment(document=document).document_sentiment
        sscore = round(sentiment.score,4)
        smag = round(sentiment.magnitude,4)

        listposts[x]["score"] = sscore
        listposts[x]["magnitude"] = smag

    except Exception as e:
        print(e)
        listposts[x]["score"] = 0
        listposts[x]["magnitude"] = 0

如果托管了 NLP API 密钥,则需要替换路径的变量"您的 NLPAPIkey"。现在,我们已经得到了情绪和幅度分数,让我们下载所有数据到用 Pandas处理的Excel文件。

1
2
3
4
import pandas as pd

df = pd.DataFrame(listposts)
df.to_excel('<filename>.xlsx', header=True, index=False)

您只需将 替换为要为 Excel 文件提供的名称。我的 Excel 文件与 18 个帖子抓取自 Fc 巴塞罗那官方 Facebook 页面,看起来像:

facebook-scraping-and-sentimen_1.png

对于一些帖子,NLP API 模块无法计算其用加泰罗尼亚语编写的量级和态度分数,不幸的是,其模型还不支持加泰罗尼亚语。

当您要解释和分析幅度和态度分数时,重要的是要知道:

  • 量级分数计算文本的情感程度。0 和 1 之间的分数将不传达情感,1 和 2 之间将传达低情绪,高于 2 将传达高情感。
  • 态度分数计算文本是否与"正"、负或中性有关。低于0的结果将传达消极的态度,超过0他们将传达积极的态度。显然,比分越接近 1 或 -1,积极或消极的态度就越强,而分数越接近 0,态度就越中性。

3.- 计算相关性

最后,为了使我们的分析更加完整并理解变量之间的关系,我们将计算不同指标的 Pearson 相关性和 p 值。

这可能是一个有趣的分析,因为你能够理解,例如,你分析的社区反应更好,当发布的帖子是非常情绪化的,或当它是情绪中立,或者如果他们更喜欢消极或积极的态度的帖子。

认为 Facebook 上的用户对负面新闻的反应比正面新闻好,或者当帖子高度情绪化时,用户与品牌的互动更多,这是否有意义?这种假设是你可以用这种技术回答的。

为了运行我们的示例,我们将创建一个列表,其中包含赞、量级分数和态度分数,代码如下,我们将计算它们的相关性和 p 值:

from scipy import stats

listlikes = []
listscore = []
listmagnitude= []

for x in listposts:
    listlikes.append(x["likes"])
    listscore.append(x["score"])
    listmagnitude.append(x["magnitude"])


correlation, p_value = stats.pearsonr(listmagnitude, listlikes)

巴塞罗那足球俱乐部职位的评分和赞之间的相关性是 0.006, 态度得分和赞之间的相关性是 0.10 。这意味着情绪不会对帖子的表现产生太大的影响,但如果帖子是积极的,它会对赞的数量产生一些积极的影响。

原文翻译自网文,作者:
原文: https://www.danielherediamejias.com/facebook-scraping-and-sentiment-analysis-with-python/