网页视频抓取脚本(技术就是力量,可以用技术吃一次冠冕堂皇的“霸王餐”)
优采云 发布时间: 2022-03-15 15:14网页视频抓取脚本(技术就是力量,可以用技术吃一次冠冕堂皇的“霸王餐”)
你有没有想过,“霸王餐”可以公开吃,甚至合法合理?或者很多人会说不可能,但是作者向我们证明了技术就是力量,技术可以用来吃一顿冠冕堂皇的“霸王餐”。
在家做饭可以省钱,这是一个公开的秘密。但作为美食天堂的市民,不去餐厅几乎是不可能的。
随处可见的火锅店、烧烤店,或者美食披萨店,仅仅一眼就足以摧毁大家省钱的意志力。如果你不想损害你的钱包,也不想放弃一个很棒的用餐体验,你必须“赚”自己的钱来支付你的餐费。
来吧,跟随作者的脚步,让你走上吃各种中餐、西餐、中西餐的路。
首先,我们的目标是去最好的餐厅吃霸王餐。这是一项技术工作,有两种方法可以实现:要么让代码来做,要么有很多空闲时间。
本文将简要介绍所使用的技术和编程语言,但不会给出代码或相关内容。将解释如何使用逻辑回归、随机森林、AWS 和自动化脚本,但不会深入。这篇文章更多的是理论而不是实践。
如果你是一个非技术人员,这个 文章 仍然适合你,只是需要更多的时间和精力。文章 中的这些方法大部分都很无聊,这就是我使用自动化脚本来实现它们的原因。
首先,我将从结果开始,然后解释我是如何做到的。
一、我做了什么
在当今的数字时代,Instagram 用户数量是一种资产。有传言说要从大量的粉丝那里赚钱,或者为了我,粉丝来支付我的饭钱,我就是这样做的。
我创建了一个 Instagram *敏*感*词*,其中收录纽约剪影、标志性景点、优雅摩天大楼的照片等。这让我在纽约地区积累了超过 25,000 名粉丝,并且还在快速增长。
我通过 Instagram 消息或电子邮件联系当地餐馆,并在主页上向粉丝发表评论,以换取免费餐点或至少餐点折扣。
我联系的几乎每家餐厅都给了我免费品尝或折扣卡。大多数餐厅都有营销预算,因此他们很乐意为我提供免费用餐体验以进行促销。有时有很多优惠,我不得不把一些送给朋友和家人。
这并不是什么新鲜事,关键是我自动化了整个过程,我的意思是 100% 手动。我编写的代码可以自动查找图片或视频、制作标题、添加主题标签、图片或视频的来源标签、过滤垃圾邮件、帖子、关注和取消关注用户、喜欢、监控我的收件箱等等 自动发送消息和向可能需要促销的餐厅发送电子邮件。
由于我有这个代码,我什至不需要实际登录帐户,我什至不需要花时间在上面。它本质上是一个机器人,但普通人无法分辨,因为它的行为与人类相似。作为它的开发者,我可以坐下来欣赏它(和我的)的工作。
二、我是怎么做到的
我会带你了解我一路上所做的一切。其中一些事情似乎是常识,但是当您使用自动化系统来执行它们时,细节很重要。该过程可以分为三个阶段:内容共享、增长黑客以及销售和推广。
1. 内容分享
事实上,我帐户上发布的内容都不是 原创 的,但我重新分享了其他人的内容,并注明出处。如果有人说我侵权并要求我删除他们的照片,我会立即采取行动。但是因为我在我的分享中收录了他们主页的链接,他们从来没有只是感谢我。
每天多次发布内容是必须的。这是 Instagram 算法确定您的曝光率的主要因素之一(通过“探索页面”)。每天发帖,尤其是在每天的“高峰时段”,可能会非常乏味。大多数人在几周后就放弃了,有时甚至一两天错过一个帖子也会导致曝光率下降。因此,有必要使内容采集和共享的过程自动化。
(1)获取图片和视频
我最初考虑使用爬虫从 Google 图片或社交新闻网站 Reddit 中抓取图片。我遇到的最大困难之一是Instagram对发布的图片大小有特殊要求,最好是“方形”图片,即宽度等于高度,因此发布非方形图片会被拒绝。这使得检索图片非常令人生畏。
我最终决定直接从其他 Instagram 帖子中搜索,因为图像大小符合要求,并且还确切地知道它来自哪里,这在自动化脚本中非常有用。
我采集了 50 个 Instagram 帐户,其中发布了许多纽约的精彩照片。我使用开源软件编写了一个爬虫来下载这些帐户上传的帖子。除了下载的文本内容外,还有图像和一堆元数据,如标题、喜欢和位置。我将爬虫设置为每天凌晨 3 点或我的图片库为空时运行。
这样,我将所有内容都集中在一个地方,并以正确的格式提供各种内容。
(2)自动判断什么是“好”或“坏”的内容
并非 Instagram 上发布的所有内容都值得重新分享。有很多帖子在卖东西、脏话或与我想要的东西无关的东西。以以下两个帖子为例:
这两个帖子来自同一个纽约 Instagram 帐户。左边的帖子是关于自然的,我很想在我的主页上重新分享。右边的广告没有上下文,有两行标题,实际上是在为纽约的移动应用做广告。
如果我把它放在我的主页上,它会很烦人而且不合适。您可以看到喜欢数量的差异 - 8200 与 1000。我需要脚本自动过滤掉右侧的帖子并重新分享左侧的帖子。
所以我不能盲目地重新分享我提取的所有内容。但我再次希望这是一个自动化的过程。所以我需要创建一个算法,可以采取最好的和最坏的。
1)算法的第一部分由一些硬编码的规则组成,第二部分是机器学习模型。
A. 算法的第一部分——硬编码规则
我要做的第一件事是根据元数据中的特定规则优化我的库存。在这个过程中,我必须严谨。如果出现警告,则图片无用。
理论上我可以爬很多内容,但是如果算法在我的页面上发布了不合适的内容,可能在我发现之前就被很多人看到了。
接下来我想做的是看看评论是否可用。我的经验是,不可用的评论大多与有争议的帖子有关,不值得冒险。
我要做的最后一件事是查看图片中是否标记了多个人。很多时候,图片中的标签是为了标记它的来源,这实际上很有用。但是如果图像有多个标签,那么就会出现混乱。
使用这些规则,我可以排除大多数垃圾邮件和不需要的帖子。但是,您无法仅通过帖子是否宣传某些内容来判断帖子是否具有高质量的内容。此外,我的硬编码规则可能仍然会遗漏一些类似销售的广告帖子,所以我想在第一部分完成后通过辅助模型。
B.算法的第二部分——机器学习模型
经过第一部分的算法过滤——硬编码规则,我发现还是有一些垃圾帖子。我不打算手动剔除它们,我打算完全自动化这个过程。
每个帖子都有大量的元数据,包括喜欢、标题、发布时间等等。我最初的目的是尝试预测哪些图像会得到最多的喜欢。不过很明显,网红博主自然会得到更多的点赞,所以这不能作为准确的判断依据。
然后我的想法是使响应变量等于喜欢率(即喜欢/关注者)并尝试做出预测。但是看了每张图片和它的点赞率之后,我认为点赞率和图像质量没有太大的相关性。我不认为那些高赞的照片是高质量的照片。
一些不知名的摄影师发布的图片内容不一定比网红博主差,即使网红的点赞率更高。我决定用分类模型替换回归模型,以评估图像内容的质量并决定是否可以发布——一个简单的是或否的问题。
在查看其他元数据之前,我抓起一堆照片并手动将每张照片标记为 0(坏)或 1(好)。这是一个非常主观的判断,可以说是我根据自己的主观判断做出模型的。但我想我的判断应该和大多数人一样。
我已经生成了数据集。响应变量为 0 或 1(即坏或好)并具有许多特征。每个帖子的元数据可以给我以下信息:
从这七个解释变量中,我更改了一些我认为有用的特性。例如,我更改了评论和喜欢的数量。我从标题中提取了带有“#”号的标签数量作为一列,并对标题中提到的用户数量进行了同样的操作。
我对剩余的标题进行矢量化处理以进行后续自然语言处理。矢量化正在删除外部单词(如“the”、“and”)并将剩余的单词转换为可用于数学分析的数字字段。我得到以下数据:
我使用了许多分类算法,例如支持向量机和随机森林,但最终使用了简单的逻辑回归。
我认为有时最简单的答案就是正确的答案。无论我以哪种方式处理数据,逻辑回归算法在我的测试集上表现最好。
与其他分类算法不同,我可以在进行预测时设置阈值分数。分类算法通常输出二进制类(在我的算法中为 0 或 1),但逻辑回归实际上输出 0 到 1 之间的小数。
例如,它可能会将帖子评分为 0.83 或 0.12。人们通常将阈值设置为 0.5,并将大于 0.5 的所有值设置为 1,其余设置为 0,但这取决于具体的用例。这个过程很关键,所以我将阈值设置为 0.9,并将低于该基准的内容视为无用。
在部署我的模型后,首先通过一套严格的规则对图片和视频进行清理,然后通过 Logistic Regression 过滤掉优秀的素材。现在我可以继续为每个帖子添加描述和评分。
2)自动指令和评分
我现在有一个自动采集相关内容并删除垃圾图像的系统——但我还没有完成。
如果您以前使用过 Instagram,那么您应该知道每个帖子在图片或视频下方都有一个标题。但由于我实际上看不到这些图像,也没有时间为它们加上标题,所以我需要制作一个通用标题。
我做的第一件事是制作最终模板。然后我必须填写代码。让我们一一看看如何填写。
标题
我创建了一个文本文件,其中收录许多可以匹配任何图像的预定义通用标题。这些标题可以是关于纽约的引述、一般性问题或简单的赞美。
对于每个帖子,标题是随机选择的。我有这么多备用标题,我不必担心经常出现的标题。对于我们的示例,我们可以选择“谁能命名这个地点?”。
B. 原产地标记
自动标记图像资源的来源并非易事。通常,Instagram 帐户页面上的图像并不意味着该帐户拥有该图像的版权。此类帐户也可能是重新共享的内容,在页面标题或图像标签中标记图像的来源。
对此,我还是决定先标注图片来源;如果我能根据其他信息找出图片的原创来源,那我以后会继续补充。这样,我基本上可以标记所有的图像资产。
首先我们看一下@likenewyorkcity的这篇帖子,虽然是这个账号分享了图片,但是图片中的tag和页面标题上的@geoffrey.parry才是图片的真正版权拥有者。
理论上,我希望我的代码在识别出这个图像后输出这样的输出:
第一步很简单,我只需要直接标记出现的账号,但是第二步就没那么容易了。
我用REGEX(正则表达式工具)来匹配一些类似于“by”或“photo”的关键词,然后在关键词后面直接找到“@”符号,通过这个方法抓取用户名被我标记为图像源的第二部分。
如果这些 关键词 没有出现在标题中,我会检查是否有人标记了图像,并且这些标记的帐户被“默认”为我应该标记的帐户。这种简单粗暴的方法虽然不是那么完美,但至少比没有那么“默认”好几倍,是值得一试的方法。
我总能查明图像的正确来源。事实上,人们评论说“感谢分享!” 在我的图像下多次(下图是一个很好的例子)
C. 标签
Instagram 允许用户为图片添加 30 个标签,图片将显示在相应的主题下。所以我创建了一个收录 100 多个相关主题的文件:
一开始我每次随机选择30个主题,一段时间后,我可以根据实际结果比较哪些主题标签获得更多“喜欢”。
D. 模板填充
在这三个步骤之后,我能够将信息 采集 填充到最终模板中,并为每个帖子提供“量身定制”的标题。
这是最终输出:
最终成功如下:
我使用了适用于纽约市任何图片的通用标题,标记了图片的 Instagram 帐户和原创来源,并添加了 30 个主题标签以提高帖子的曝光率。如果你继续查看帖子评论,你甚至可以看到原作者感谢我。
E. 邮政
现在我有一个集中管理的图像存储库,并且可以为每篇文章自动生成标题,最后一步就是发布。
我在 AWS 上启动了一个 EC2 实例来托管我的代码,我选择这种方式是因为它比我的个人电脑更可靠——它始终在线,并且项目的工作量在条件下完全由 AWS 免费服务覆盖。
我编写了一个 Python 脚本来随机抓取其中一张图像,并在抓取和清理过程完成后自动生成标题。我设置了一个定时任务:每天早上 8 点、下午 2 点和晚上 7:30 调用我的 API 来完成所有的发布操作。
至此,我已经完全自动化了内容查找和发布过程,我不再需要每天查找资源和发布来运行我的帐户 - 该程序为我完成了一切。
2. 黑客增长
升粉
仅仅发帖是不够的——我需要设计一些方法来不断吸引关注者。由于我不手动执行任何操作,因此我还需要找到一种方法来自动执行此步骤。我的想法是通过直接与观众感兴趣的用户互动来增加帐户的曝光率。
我编写的交互脚本从美国东部标准时间上午 10 点到晚上 7 点运行,在我看来,这是 Instagram 最活跃的时间段。一整天,我的帐户有条不紊地关注、取消关注和喜欢相关用户和照片,以便他们以相同的方式与我互动。
关注(更多数据科学方式)
如果您是 Instagram 用户,无论您是否意识到,我相信您已经被这种方法“碾压”了,这对于试图增加关注者的用户特别有用。如果你有一天在健身板块关注了一个有趣的 Instagram 页面,那么第二天你就会被一群健美运动员和健身模特关注。这种方法虽然看起来很琐碎,但非常有效。
请注意,您不能在 Instagram 上滥用此方法来关注其他帐户。Instagram 的算法非常严格,如果你一天做的太多或关注太多用户,他们会阻止你甚至封禁你的帐户。
此外,您每天最多只能在 Instagram 上获得 7,500 名关注者;并且经过大量测试,我发现你一天可以关注400人,取消关注400人。毕竟运营条件有限,每一次关注都非常宝贵,不能浪费在不太可能关注你的人身上。所以,我决定采集每个动作的元数据,并基于它建立一个模型来预测有人会关注你的可能性,确保我关注的每一个动作都是有意义的。
我花了几分钟手动采集与我一起在该部分下的 20 多个帐户。我没有初始数据,所以我在前几周随机进行了这些操作以增加我的追随者,但更重要的是我需要 采集 尽可能多的元数据,以便我可以构建我的预测模型。
我浏览了 20 多个相关帐户,关注了他们的追随者,喜欢了他们的照片或评论了他们的帖子。在每次关注操作中,我都会尽可能多地获取用户的元数据,以形成一个 CSV 文件,其中收录他们的关注者和关注者的比例,无论他们是公开的还是私人的,或者他们是否有*敏*感*词*图片等。
每天,该脚本都会自动扫描 CSV 文件并标记他们的响应,并按 0、1、2 顺序排列它们。如果用户在两天内没有任何回应,则标记为0。如果用户在最近十张图片中没有任何交互,则将其标记为1。2是最理想的结果。在帖子中互动。这样,我的数据集如下所示:
在将数据“输入”到 ML 模型之前,我通过探索性数据分析得出以下结论:
根据上述见解,我优化了最初针对搜索用户的方式。我将设置调整为只在早上关注,主要是寻找女性用户。现在,我终于能够建立一个机器学习模型,在与用户交互之前根据用户的元数据预测是否关注我,这样我就不会浪费我每天可以关注的用户配额来关注某人谁不跟着我。人们。
接下来,我选择使用随机森林算法对后续结果进行分类。最初,我没有设置结构或结果变量,而是使用了许多不同的决策树,因为我想获得它们的可视化流程图。随机森林是对决策树的增强,可纠正单个树中存在的不一致性。在对我的训练数据建模后,测试数据的准确率始终超过 80%,所以这对我来说是一个非常有效的模型。进一步,我将模型应用于爬取用户的代码,优化了关注算法,我的关注者数量开始上升。
脱掉
两天后,我不再关注我关注的人,两天时间足以让我知道他们是否会回来。这样我可以关注更多的人,采集更多的数据,并继续获得追随者。
我为什么要关闭它们?有两个原因:第一,我的粉丝数上限是7500;其次,大家肯定都想提高follow/following比,这样才能体现出自己特别受欢迎,特别有吸引力。
这是一项简单的任务,因为您不需要做出任何决定。您在一天内关注了 400 人,两天后您可以取消阻止这些人。
喜欢
点赞也可以增加追随者。但是我并没有花太多力气去选择一些大家喜欢和喜欢的图片发到我的账号里,因为和上面的其他方法相比,效果不是那么明显。所以,我只是提供了一组预定义的hashtags,通过话题关联,用户的连锁点击,获得一些关注。
3. 自动提升
在这一点上,我有一个特别聪明的 Instagram 机器人。我的纽约主页查找与其相关的内容,剔除不良的潜在帖子,吸引用户群,并全天发布帖子。此外,从早上 7:00 到晚上 10:00,它通过分析喜欢、关注和取消关注的受众来修改其设置,并使用一些算法来优化受众的定义。最重要的是,它的分析和操作更加用户友好,类似于真正的 Instagram 用户。
一两个月,我可以看到追随者的数量明显增加。每天我都会在我的帐户中添加 100 到 500 名新关注者,欣赏我喜爱的城市的美丽画面。
我可以开始享受我的生活,努力工作,和朋友出去吃饭,看电影,而不必花时间手动发布。当我忙于自己的业务时,它可以完全托管我的帐户。
当我有 20,000 名粉丝时,我决定是时候吃喝玩乐了,所以我需要它来自动推广我的产品。
我制作了一个适用于餐馆、剧院、博物馆或商店的通用消息模板。以下是我绞尽脑汁的:
现在,我只需要在发送消息时跟踪帐户名称和我拥有的关注者数量。
我的目标是找到商业用户并像他们一样推销我的产品。商业用户配置文件与常规用户配置文件略有不同 - 商业用户可以将电子邮件、电话号码、地址和其他详细信息添加到他们的网页。但最重要的是,他们的*敏*感*词*中都有一个类别标签。
上图是业务用户的示例。在左上角的名字下方,显示是一家韩国餐厅,顶部有电话、邮件、地址等提醒。
我编写了一个 Python 脚本来查找这些类型的页面,并让我的帐户自动向它们发送消息。该脚本采用两个参数,一个初始主题标签和一个要在类别标签中查找的字符串。在这里,我使用标签“Manhattan”和字符串“restaurant”作为示例。
该脚本的作用是提取主题标签并加载照片,然后遍历帖子,直到找到在照片中标记用户的帖子。如果找到它,它会检查它的标签以查看它是否是商业用户。
如果是这样,请查看该用户类别。如果类别中收录“餐厅”一词,他们将收到我的消息。商业用户通常将他们的电子邮件留在他们的页面上,因此会自动发送电子邮件并在后台跟进我的 Instagram 消息。在搜索过程中的任何时候,我都可以将标签更改为#TimesSquare,将目标字符串更改为“博物馆”等。我可以搜索任何我想要的东西。
当我登录我的帐户时,我会看到它自动生成和发送的消息。
如果我转到我的 Gmail 发件箱,我会看到以下邮件:
我还有一个脚本可以监视我的收件箱是否有任何回复并提醒我。如果我收到回复电子邮件,我会联系我的潜在客户。
以上所有操作均由脚本自动运行,无需任何手动操作。
终于明白吃喝了~
最终的结果比我想象的要好,我利用我的 Instagram 推广获得了很多餐厅礼品卡和免费餐点。
借助人工智能、自动化脚本和数据科学的力量,当我的代码脚本自动运行时,我可以高枕无忧。他是一个特别尽责的推销员,让我在自己的时间享受生活。
作者 Chris Buetti,NBCUniversal 的数据工程师,2017 年毕业于维克森林大学。
本文由@CDAData Analyst 翻译发布 每个人都是产品经理。未经许可禁止复制
题图来自Unsplash,基于CC0协议