微信PC端公众号推文自动化爬取

目前自动获取windows程序窗口数据主要采用两种方法,即模拟自动化操作(python实现),或者采用Windows逆向的dll注入(C语言实现),

模拟自动化操作

由于自动化模拟操作程序便捷易于实现,我们现阶段主要采取的是模拟自动化操作来完成数据获取,对于窗口的相关句柄接口,部分的非固定目标通过PIL工具截取相关位置图片与目标图片进行对比来识别,源码如下:

cut_img = ImageGrab.grab(pos)#截取目标位置图片
cut_img.save(‘./img/cut_gongzhonghao.png’)  # 保存截图到文件夹中
locate = pyautogui.locate(‘img1.png’, ‘img2.png’, grayscale=True)#对比判断目标图片是否可用

判断完后如果结果可用,利用pyautogui工具来模拟鼠标点击操作,下面是模拟点击源码:

windowPos = self.getclickSearchPos()#确定目标的像素位置
pyautogui.moveTo(windowPos)#移动鼠标至目标位置
time.sleep(1)
pyautogui.click(windowPos[0], windowPos[1])#点击目标位置

对公众号历史推文进行依次点击以获取文章链接,对于不同分辨率的操作页面,选择不同的像素位置即可完成。这种方法由于是自动化模拟操作,所以导致只能对历史文章进行操作,而不能在推文推送的第一时间获得。

Windows逆向及dll注入

Windows逆向针对微信PC端数据截留,能实时截留微信消息或者推文信息,在微信2.x版本上具有较好的效果,但是对于3.x及以上版本,微信针对dll注入截留方式有相关反注入加密措施,所以目前大多数dll注入方式都采用低版本的微信PC端。

这种Windows注入思路为以下几部分:

①获取整个Windows系统进程快照;

②利用微信进程名”WeChat.exe”得到微信进程ID和进程name;

③用找到的pid打开进程获得微信句柄;

④申请内存并远程操作线程执行加载改写dll;

dll注入如果采用微信3.x版本极易导致账号被封,所以采用这种方式要慎重。

安卓ADB命令行工具使用指南

最近准备清理手边的电子产品发现好几台老旧手机,包括iPhone4S和几台安卓低端机器。iPhone4S是之前的爱姬,放了好久以后电池也不行了。唯独有一台Android的低端机还能用。记得之前也用这台机器完了一把刷机并写了一篇文章《记一次安卓刷机的小结》。由于这台机器的配置非常低,系统也被裁剪的几乎只能打电话发短信。即没有安卓商店,也没有浏览器。所以如何安装app就变成了首要任务。最后发现也只能够把apk下载下来通过SD卡安装或者使用ADB(Android Debug Bridge)命令行工具实现。通过SD卡安装没什么困难,这里就说一说安卓命令行工具ADB的一些使用技巧。
Read more

Redis服务器磁盘满导致连接失败

在默认情况下,Redis是开启磁盘备份功能的。并且当磁盘备份发生故障以后会暂停写入操作。因此,当Redis配合MySQL等关系型数据库作为高速缓存服务器使用是,我们可以完全禁用磁盘备份功能。如果没有其他持久层的支持,那么磁盘备份功能就必不可少,除非里面的数据没有保存的必要(可能性不大)。本案例中就出现由于磁盘空间不足,导致Redis服务磁盘备份失败,自动暂停了写入操作,所有连接Redis服务器进行写操作失败。
Read more

基于Twisted的Scrapy异步调度器

Scrapy是非常有名的一款爬虫开发框架。如果是小型项目或者简单爬取一些数据,可以基于Scrapy迅速搭建一个从爬取到数据解析清晰的全流程方案。Scrapy的核心是基于Twisted的事件驱动。因此整个数据爬取、入栈、出栈、提取和清洗都是基于异步事件的。在研究Scrapy的调度机制之前,首先需要了解Twisted,特别是Twisted的几个非常重要的概念。否则,Scrapy的调度器代码看起来真的是非常吃力,很难理解。
Read more

数据可视化提高PDF表格识别准确度

上篇文章《上市公司公告和基金公告PDF数据解析》中提到使用pdfplumber解析基金公告中的表格。然而由于各种各样的原因,在开发的过程中需要微调代码,从而提高PDF中表格的识别精确度。因此如果能够通过可视化的方式,即所见即所得的方式,进行表格提取单步调试,可以事半功倍地提升工作效率。
Read more

替换Homebrew镜像源

最近在电脑上运行brew操作的速度实在是太慢了,主要是brew需要连接到github上同步信息。因此考虑配置Homebrew的源地址,可能会好很多。之前在《CentOS镜像配置指南》文章中顺便也找到Homebrew镜像,那么就暂时先用一下吧。本文的内容主要是从阿里云社区Homebrew镜像搬砖而来,细节可以看原文(如果还存在的话)。
Read more

上市公司公告和基金公告PDF数据解析

最近关注股票和基金的朋友比较多,可能是由于股市表现和基金走势都非常好,所有关注基金的朋友也越来越多。每年的一月份都是个大基金公司披露四季报和年报的时间点。所以有朋友托我看看能不能帮助分析一下上市基金的四季报。目前的情况是有一堆的PDF类型的公告,如何把这些基金公告转换成Excel的数据表,这样就方便统计和分析了。市场上PDF解析工具非常多,也有很多项目支持PDF的表格解析。于是,本人就挑选了一个比较有知名度第三方工具:pdfplumber
Read more

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

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

目前很多商家使用微信公众号或者小程序管理,例如有赞。但是微信公众号和小程序会为每一个用户提供一个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