基于微信好友和微信公众号的用户管理

很多微商通过微信渠道带货卖货,一般都是加好友后在微信朋友圈发布新货信息,包括照片和优惠信息等。或者直接发送私信给潜在用户,通过私聊的方式沟通。一般来说,这种运营方式已经足够满足微商的日常需求。但是如果客户多了以后,以一种纯手工的方式管理就非常累人了。特别是需要记住每一个客户的微信号,姓名,电话,收货地址,订单信息等等。

目前很多商家使用微信公众号或者小程序管理,例如有赞。但是微信公众号和小程序会为每一个用户提供一个openID,这个openID是独立的。例如在麦当劳小程序中的用户openID和在麦当劳微信公众号中同一个用户的openID是不一样的。如果需要在同一个微信开放平台帐号下的移动应用、网站应用、公众号和小程序追踪用户信息,就需要使用UnionID。如果小程序和公众号绑定到同一个开放平台,那可以获取相同的UnionID,但需要用户授权。但是无论是openID或者unionID都无法直接对应到微信用户。当然这也是为了保护用户隐私,但如果真要为了更加高效地管理用户或者精准营销,还是和通过一些方式实现的。以下以微信公众号为例,简要讨论以下如何在微信公众号中找到对应的微信号。
Read more

如何设计和搭建可伸缩的数据爬虫平台

说起爬虫大家一定不会陌生,随便在百度上搜以下,有一大堆的爬虫教程。不过,大多数的教程基本上就是介绍一下什么是数据爬虫。用一段简单的python脚本演示如何使用requests,BeautifulSoup,xpath和正则表达式爬取和提取数据。如果再深入一点,可能会讲到静态数据爬取或者动态页面的数据爬取,并且可能会介绍到selenium这个自动化测试框架。如果再要深入一点,可能会介绍Scrapy这个非常有名的Twisted的异步处理框架。这里我们就不介绍什么是Scrapy,什么是Twisted,什么是基于协程的异步处理了,有兴趣的朋友可以在百度上搜索自学以下。

以上提到的这些内容,都有一个特点——讲的都是单机的爬虫方案。对于简单爬取任务尚可应付,但是对于一个大型的爬取任务,或者一个长期的项目,单机爬虫完全是心有余而力不足的方案。在之前写过的一篇文章《爬虫系统构架演进-从脚本到服务的蜕变》,我详细分析了单机脚本爬虫的优势和劣势。并介绍了基于Scrapy Cluster的分布式爬虫方案。在另外一片文章《搭建上亿级舆情爬虫系统》中,我又详细介绍了Scrapy-Cluster开源项目中的一些缺陷。并且简单描述了一个真正的分布式数据爬虫系统需要的一些具体模块。本文将在前两篇文章的基础上,从另外一个视角讨论如何设计和搭建可伸缩的数据爬虫平台。
Read more

基于xpath和正则表达式的数据提取

在开发数据爬虫过程中,xpath和正则表达式是两个最常用的数据提取工具。对于xml或html等结构化非常强的数据结构,xpath因为其高性能更是独一无二的首选。 对于完全不了解xpath的朋友可以看看w3school的xpath基础教程。而正则表达式的使用场景就更加广泛了,对于xpath无法提取的数据,正则表达式可以轻而易举地实现。当然,正则表达式唯一的缺点就是性能比较低,对于大篇幅的文本在做数据提取是会消耗比较长的时间。正则表达式没有官方的基础教程,由于大多数的爬虫使用python开发,这里就给出一个python的正则表达式文档
Read more

Android安卓手机自动化环境的搭建

最近需要在Android安卓平台上处理一些日常的重复任务,因此尝试学习了一下Android平台的自动化框架。如果没有理解错的话,现在比较成熟的平台是Automator2,以及基于Automator2的Appium。Appium在Automator2的基础上又做了更高层的封装,提供了一些更多可视化的功能组建。本文的内容大多来自互联网,修修补补之后总算也是成功搭建好了。
Read more

无头浏览器Chrome Headless的爬取和反爬取

最近两天想到Chrome也提供Headless的无头模式,突然想尝试一下。首先官方有一篇文章专门介绍了Chrome无头模式的使用,和基于无头模式衍生出来的各种工具。详情大家可以阅读此文。因此在文章中已经覆盖的内容,我这里就不再重复了。本文我们就简单说说在使用Chrome Headless过程中的一些感想和遇到的问题吧。
Read more

CentOS镜像配置指南

这两天要在CentOS上搭建一个自动化Chrome环境,但是按照网上的帖子按步就把,总是在某些地方卡住。实际上CentOS提供的yum工具非常方便,通常碰到的问题都是缺少依赖文件,并且默认的镜像站点也没有提供依赖包下载。例如,我们在安装Chrome过程中就遇到了缺少libvulkan.so.1依赖包的问题,并且无法在镜像网站上下载到对应的库文件。
Read more

MongoDB的时间类型和ObjectID的时间依据

网上有关于很多MongoDB时间存储格式Date的讨论。其实核心的点就在于Mongodb中以Date格式存储的数据默认为是UTC时间。简单来讲,例如当前我们是早上8点,我们在时区设置为正8区的电脑上使用使用python的datetime.now()获取的时间就是早上8点。但是我们把这个时间不做任何处理,直接存放到MongoDB中的Date类型字段中,就变成了UTC时间(0时区)的早上8点。那么这种情况会带来什么问题呢?
Read more

2步保护你的网站远离恶意爬虫

之前写过一篇文章教你如何防范爬虫,文中列出了8中防范恶意爬虫的方法,并且列出了各自的优劣。一般来说,最简单实现防范恶意爬虫的方法也是最容易被破解的。但是复杂的方法虽然提升了数据安全级别,但是在开发上也要付出比较巨大投入。那么有没有一种比较简单的,但是又不那么容易被破解的恶意爬虫防范方案呢?今天我们就教大家一个相对简单但是能够防范80%恶意爬虫的方案。
Read more

如何有效地读写大数据文件数据

现在处理数据文件常要遇到文件过大,动辄百万行数据,使用普通的文本编辑器基本上都打不开。在Linux中使用VI编辑器也要花很久才能打开,如果需要编辑这么大的文件就非常头痛。最近碰到一个问题,需要在一个40万行的数据文件中,抽出2万行最程序开发(开发阶段不需要那么完整的数据),于是找到了几种从大文件中抽取数据的方案。
Read more

哔哩哔哩视频下载教程

最近在B站追番,突然想把特别喜欢的动漫下载收藏。到目前为止,哔哩哔哩官方App好像还没有下载视频的功能,虽然可以在手机上缓存视频,但是还没有办法完全达到真正意义上的下载。本文将记录探究怎么下载哔哩哔哩视频的整个过程,期间可能会涉及一些网络技术问题。不过在文章的最后,一定会附上一个最终的简要步骤。对于只想下载视频的朋友,建议直接跳到文章中后一节查看下载B站视频的方法。
Read more